卷积的计算过程

news2024/11/25 17:17:58

卷积的计算过程

flyfish
包括手动计算,可视化使用torch.nn.Conv2d实现

示例

import torch
import torch.nn as nn

# 定义输入图像
input_image = torch.tensor([
    [1, 2, 3, 0, 1],
    [0, 1, 2, 3, 4],
    [2, 3, 0, 1, 2],
    [1, 2, 3, 4, 0],
    [0, 1, 2, 3, 4]
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # 添加批次和通道维度
print(input_image.shape)

# 定义卷积核
conv_kernel = torch.tensor([
    [1, 0, -1],
    [1, 0, -1],
    [1, 0, -1]
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # 添加输入和输出通道维度
print(conv_kernel.shape)
# 创建卷积层
conv_layer = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=3, stride=1, padding=0, bias=False)

# 将卷积核的权重设置为自定义值
with torch.no_grad():
    conv_layer.weight = nn.Parameter(conv_kernel)

# 进行卷积操作
output_tensor = conv_layer(input_image)

# 打印输入图像
print("输入图像:")
print(input_image.squeeze().numpy())

# 打印卷积核
print("卷积核:")
print(conv_kernel.squeeze().numpy())

# 打印输出结果
print("输出结果:")
print(output_tensor.squeeze().detach().numpy())


torch.Size([1, 1, 5, 5])
torch.Size([1, 1, 3, 3])
# 输入图像:
[[1. 2. 3. 0. 1.]
 [0. 1. 2. 3. 4.]
 [2. 3. 0. 1. 2.]
 [1. 2. 3. 4. 0.]
 [0. 1. 2. 3. 4.]]
卷积核:
[[ 1.  0. -1.]
 [ 1.  0. -1.]
 [ 1.  0. -1.]]
输出结果:
[[-2.  2. -2.]
 [-2. -2. -1.]
 [-2. -2. -1.]]
输入图像和卷积核

输入图像 I I I:
[ 1 2 3 0 1 0 1 2 3 4 2 3 0 1 2 1 2 3 4 0 0 1 2 3 4 ] \begin{bmatrix} 1 & 2 & 3 & 0 & 1 \\ 0 & 1 & 2 & 3 & 4 \\ 2 & 3 & 0 & 1 & 2 \\ 1 & 2 & 3 & 4 & 0 \\ 0 & 1 & 2 & 3 & 4 \\ \end{bmatrix} 1021021321320320314314204
卷积核 K K K:
[ 1 0 − 1 1 0 − 1 1 0 − 1 ] \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} 111000111

手动计算卷积

我们将逐个计算每个位置的卷积结果:

  1. 位置 (0, 0) [ 1 2 3 0 1 2 2 3 0 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) = ( 1 − 3 ) + ( − 2 ) + ( 2 ) = − 2 \begin{bmatrix} 1 & 2 & 3 \\ 0 & 1 & 2 \\ 2 & 3 & 0 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) = (1 - 3) + (-2) + (2) \\= -2 102213320 111000111 =(11+20+3(1))+(01+10+2(1))+(21+30+0(1))=(13)+(2)+(2)=2
  2. 位置 (0, 1) [ 2 3 0 1 2 3 3 0 1 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) = 2 + ( 1 − 3 ) + ( 3 − 1 ) = 2 \begin{bmatrix} 2 & 3 & 0 \\ 1 & 2 & 3 \\ 3 & 0 & 1 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) = 2 + (1 - 3) + (3 - 1) \\= 2 213320031 111000111 =(21+30+0(1))+(11+20+3(1))+(31+00+1(1))=2+(13)+(31)=2
  3. 位置 (0, 2) [ 3 0 1 2 3 4 0 1 2 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) = 3 − 1 + 2 − 4 − 2 = − 2 \begin{bmatrix} 3 & 0 & 1 \\ 2 & 3 & 4 \\ 0 & 1 & 2 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) = 3 - 1 + 2 - 4 - 2 \\= -2 320031142 111000111 =(31+00+1(1))+(21+30+4(1))+(01+10+2(1))=31+242=2
  4. 位置 (1, 0) [ 0 1 2 2 3 0 1 2 3 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) = − 2 + 2 + 1 − 3 = − 2 \begin{bmatrix} 0 & 1 & 2 \\ 2 & 3 & 0 \\ 1 & 2 & 3 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) = -2 + 2 + 1 - 3 \\= -2 021132203 111000111 =(01+10+2(1))+(21+30+0(1))+(11+20+3(1))=2+2+13=2
  5. 位置 (1, 1) [ 1 2 3 3 0 1 2 3 4 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) = 1 − 3 + 3 − 1 + 2 − 4 = − 2 \begin{bmatrix} 1 & 2 & 3 \\ 3 & 0 & 1 \\ 2 & 3 & 4 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \begin{aligned} \\ &= (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) \\ &= 1 - 3 + 3 - 1 + 2 - 4 \\ &= -2\end{aligned} 132203314 111000111 =(11+20+3(1))+(31+00+1(1))+(21+30+4(1))=13+31+24=2
  6. 位置 (1, 2) [ 2 3 4 0 1 2 3 4 0 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 4 ⋅ 0 + 0 ⋅ ( − 1 ) ) = − 2 − 2 + 3 = − 1 \begin{bmatrix} 2 & 3 & 4 \\ 0 & 1 & 2 \\ 3 & 4 & 0 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\ = (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (3 \cdot 1 + 4 \cdot 0 + 0 \cdot (-1)) \\ = -2 - 2 + 3 \\ = -1 203314420 111000111 =(21+30+4(1))+(01+10+2(1))+(31+40+0(1))=22+3=1
  7. 位置 (2, 0) [ 2 3 0 1 2 3 0 1 2 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 2 ⋅ 1 + 3 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) + ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) = 2 + ( 1 − 3 ) − 2 = − 2 \begin{bmatrix} 2 & 3 & 0 \\ 1 & 2 & 3 \\ 0 & 1 & 2 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} = (2 \cdot 1 + 3 \cdot 0 + 0 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) + (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) \\= 2 + (1 - 3) - 2 \\= -2 210321032 111000111 =(21+30+0(1))+(11+20+3(1))+(01+10+2(1))=2+(13)2=2
  8. 位置 (2, 1):$ [ 3 0 1 2 3 4 1 2 3 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 3 ⋅ 1 + 0 ⋅ 0 + 1 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) + ( 1 ⋅ 1 + 2 ⋅ 0 + 3 ⋅ ( − 1 ) ) = 3 − 1 + 2 − 4 + 1 − 3 = − 2 \begin{bmatrix} 3 & 0 & 1 \\ 2 & 3 & 4 \\ 1 & 2 & 3 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\= (3 \cdot 1 + 0 \cdot 0 + 1 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) + (1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1)) = 3 - 1 + 2 - 4 + 1 - 3 \\= -2 321032143 111000111 =(31+00+1(1))+(21+30+4(1))+(11+20+3(1))=31+24+13=2
  9. 位置 (2, 2) [ 0 1 2 3 4 0 2 3 4 ] ⊙ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = ( 0 ⋅ 1 + 1 ⋅ 0 + 2 ⋅ ( − 1 ) ) + ( 3 ⋅ 1 + 4 ⋅ 0 + 0 ⋅ ( − 1 ) ) + ( 2 ⋅ 1 + 3 ⋅ 0 + 4 ⋅ ( − 1 ) ) = − 2 + 3 + 2 − 4 = − 1 \begin{bmatrix} 0 & 1 & 2 \\ 3 & 4 & 0 \\ 2 & 3 & 4 \\ \end{bmatrix} \odot \begin{bmatrix} 1 & 0 & -1 \\ 1 & 0 & -1 \\ 1 & 0 & -1 \\ \end{bmatrix} \\= (0 \cdot 1 + 1 \cdot 0 + 2 \cdot (-1)) + (3 \cdot 1 + 4 \cdot 0 + 0 \cdot (-1)) + (2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1)) \\= -2 + 3 + 2 - 4 \\= -1 032143204 111000111 =(01+10+2(1))+(31+40+0(1))+(21+30+4(1))=2+3+24=1

参数解释

conv_layer = nn.Conv2d(
    in_channels=3,        # 输入通道数
    out_channels=16,      # 输出通道数
    kernel_size=3,        # 卷积核大小
    stride=1,             # 步幅
    padding=1,            # 填充
    padding_mode='zeros', # 填充模式
    dilation=1,           # 空洞卷积
    groups=1,             # 组卷积
    bias=True             # 是否使用偏置
)
in_channels (int): 输入通道数。例如,对于RGB图像,in_channels 应为 3。
out_channels (int): 输出通道数,也就是卷积核的数量。
kernel_size (int or tuple): 卷积核的大小。如果是整数,表示卷积核的高度和宽度相等。如果是元组,表示 (高度, 宽度)。
stride (int or tuple, optional): 卷积操作中窗口滑动的步幅。如果是整数,表示高度和宽度的步幅相等。如果是元组,表示 (高度步幅, 宽度步幅)。默认值为 1。
padding (int or tuple, optional): 输入的每一边要填充的零的层数。如果是整数,表示高度和宽度的填充相等。如果是元组,表示 (高度填充, 宽度填充)。默认值为 0。
padding_mode (str, optional): 填充模式,可以是 'zeros', 'reflect', 'replicate' 或 'circular'。默认值为 'zeros'。
dilation (int or tuple, optional): 卷积核元素之间的间距。如果是整数,表示高度和宽度的间距相等。如果是元组,表示 (高度间距, 宽度间距)。默认值为 1。
groups (int, optional): 从输入通道到输出通道的阻塞连接数。默认值为 1。groups 可以用于实现深度可分离卷积。
bias (bool, optional): 如果设置为 True,则添加一个学习到的偏置。默认值为 True。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.animation import FuncAnimation, PillowWriter

# 定义输入图像和卷积核
input_image = np.array([
    [1, 2, 3, 0, 1],
    [0, 1, 2, 3, 4],
    [2, 3, 0, 1, 2],
    [1, 2, 3, 4, 0],
    [0, 1, 2, 3, 4]
])

conv_kernel = np.array([
    [1, 0, -1],
    [1, 0, -1],
    [1, 0, -1]
])

# 输入图像和卷积核的尺寸
input_size = input_image.shape[0]
kernel_size = conv_kernel.shape[0]
output_size = input_size - kernel_size + 1

# 创建图形和轴
fig, ax = plt.subplots(figsize=(6, 6))

# 显示输入图像
im = ax.imshow(input_image, cmap='viridis')

# 初始化矩形框和文本
rect = patches.Rectangle((0, 0), kernel_size, kernel_size, linewidth=2, edgecolor='r', facecolor='none')
ax.add_patch(rect)
text = ax.text(0, 0, '', ha='center', va='center', color='white', fontsize=12)

# 动画更新函数
def update(frame):
    i, j = divmod(frame, output_size)
    sub_matrix = input_image[i:i+kernel_size, j:j+kernel_size]
    conv_result = np.sum(sub_matrix * conv_kernel)
    
    # 更新矩形框的位置
    rect.set_xy((j, i))
    
    # 更新文本的位置和内容
    text.set_position((j + kernel_size / 2, i + kernel_size / 2))
    text.set_text(f'{conv_result:.2f}')
    
    return im, rect, text

# 创建动画
ani = FuncAnimation(fig, update, frames=output_size * output_size, blit=True, repeat=False)

# 保存动画为 GIF 文件
ani.save('convolution_animation.gif', writer=PillowWriter(fps=1))

plt.show()

请添加图片描述
卷积的结果

[[-2.  2. -2.]
 [-2. -2. -1.]
 [-2. -2. -1.]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1805913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240609如何查询淘宝的历史价格

20240609如何查询淘宝的历史价格 2024/6/9 18:39 百度:淘宝历史价格 淘宝历史价格查询网站 https://zhuanlan.zhihu.com/p/670972171 30秒学会淘宝商品历史价格查询! https://item.taobao.com/item.htm?id693104421622&pidmm_29415502_2422500430_1…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

sqlilabs靶场安装

05-sqllabs靶场安装 1 安装 1 把靶场sqli-labs-master.zip上传到 /opt/lampp/htdocs 目录下 2 解压缩 unzip sqli-labs-master.zip3 数据库配置 找到配置文件,修改数据库配置信息 用户名密码,修改为你lampp下mysql的用户名密码,root/123456host:la…

GraphQL(6):认证与中间件

下面用简单来讲述GraphQL的认证示例 1 实现代码 在代码中添加过滤器: 完整代码如下: const express require(express); const {buildSchema} require(graphql); const grapqlHTTP require(express-graphql).graphqlHTTP; // 定义schema,…

计算机网络:数据链路层 - 扩展的以太网

计算机网络:数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网,他最初使用粗铜轴电缆作为传输媒体,后来演进到使用价格相对便宜的细铜轴电缆。 后来,以太网发展出来了一种使用大规模…

启动xv6遇坑记录

我是在VMware上的Ubuntu22.04.4搭建的,启动xv6遇到超多bug,搞了好几天,所以记录一下。 目录 git push的时候报错 make qemu缺少包 运行make qemu时卡住 可能有影响的主机设置 git push的时候报错 remote: Support for password authent…

kafka-生产者事务-数据传递语义事务介绍事务消息发送(SpringBoot整合Kafka)

文章目录 1、kafka数据传递语义2、kafka生产者事务3、事务消息发送3.1、application.yml配置3.2、创建生产者监听器3.3、创建生产者拦截器3.4、发送消息测试3.5、使用Java代码创建主题分区副本3.6、屏蔽 kafka debug 日志 logback.xml3.7、引入spring-kafka依赖3.8、控制台日志…

vip学员作业--横屏下面怎么自适应展示竖屏应用方案征集(排除原生letterbox方式)

背景: 昨天相关的视频和公众号blog已经讲解了,横屏下如何正确显示竖屏app相关android原生的处理方案具体链接如下: https://mp.weixin.qq.com/s/P95rN7dBOSCENc38KZ4Ulg 采用了原生letterbox即装相框模式画面变成如下: letterbox上面画面…

Zabbix6.0自定义监控项

文章目录 一、自定义监控整体流程二、自定义监控案例1、监控TCP 443端口案例2、监控服务器异地登入(带参监控项) 一、自定义监控整体流程 操作端流程备注Agent端1️⃣ linux:通过命令、脚本取出对应的值2️⃣ linux:根据zbx要求按照格式、编写配置文件、…

Polar Web【中等】search

Polar Web【中等】search Contents Polar Web【中等】search思路&探索首页一般注入方式 EXP&效果Payload 总结 思路&探索 见到题目标题,预测可能有目录扫描或者输入框查询数据之类情况,具体细节在破解过程中才能清楚 打开站点,显…

less---20-28

less-20 这关登陆成功会显示cookie,所以抓包在cookie处注入 less-21 这关登陆成功会显示cookie,所以抓包在cookie处注入,发现不成功,查看代码发现被编码 先对注入语句进行base64编码再注入 less-22 闭合字符",同21关 less-23 这关查看代码发现…

什么是 AOF 重写?AOF 重写机制的流程是什么?

引言:在Redis中,持久化是确保数据持久性和可恢复性的重要机制之一。除了常见的RDB(Redis Database)持久化方式外,AOF(Append Only File)也是一种常用的持久化方式。AOF持久化通过记录Redis服务器…

总结七大排序算法

插入排序 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了…

10.邮票问题

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/625 题目描述 有四种面值的邮票,分别是 …

【文件导出2】导出html文件数据

导出html文件数据 文章目录 导出html文件数据前言一、实现代码1.controller层2.接口层3.接口实现类4.FileUtil 工具类 二、文件导出效果总结 前言 springBoot项目实现在线导出html文件数据的功能。 一、实现代码 1.controller层 GetMapping("/record/_export") Ap…

Java——简单图书管理系统

前言: 一、图书管理系统是什么样的?二、准备工作分析有哪些对象?画UML图 三、实现三大模块用户模块书架模块管理操作模块管理员操作有这些普通用户操作有这些 四、Test测试类五、拓展 哈喽,大家好,我是无敌小恐龙。 写…

评书下载到u盘,下载到内存卡,下载到手机或电脑的方法

评书下载的方法有很多种,无论是通过什么方法,我们都可以快速的获取喜爱的评书。下面将详细介绍常见的评书下载方法,帮助您快速上手。 1、搜索“十方评书网”。 2、要下载那个评书家的选择那个评书家就可以。 3、点击进去后可以一键下载单部评…

C语言详解(结构体)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…

英语学习笔记33——A fine day

A fine day 风和日丽 词汇 Vocabulary day n. 日子,白天 复数:days 常见节日:Mothers’ Day 母亲节      Fathers’ Day 父亲节      Teachers’ Day 教师节      Children’s Day 儿童节      Women’s Day 妇女节 c…

美银美林:看好铜价涨到12000美元,这类铜矿企业弹性更大

美银美林指出,考虑到能源转型以及AI投资热潮对铜的需求巨大,到2026年铜供需缺口有望扩大一倍。给予紫金矿业、江西铜业等多家巨头买入评级,并认为一旦铜价上行,KGHM等规模较小、成本较高的企业的利润增长可能更为显著。 高盛、花…