python - numpy einsum:3D 矩阵和 2D 矩阵之间的元素乘积
问题描述
我有两个 numy 矩阵:
- 形状为 (N,M,d) 的 A
- B 形状 (N,d)
因此,我试图以这样的方式获得一个形状为 (N,M,d) 的矩阵,以便在 B 和 A 的每个元素(它们是 M 个元素)之间进行元素明智的乘积。我使用 numpy 的 einsum 如下:
product = np.einsum('ijk,ik->ijk', A, B)
我得到了良好的形状,但我怀疑操作是错误的,并且我没有按预期做元素明智的产品。
我对 einsum 的使用是否正确?
解决方案
我试图以这样的方式获得一个形状为 (N,M,d) 的矩阵,以便在 B 和 A 的每个元素(它们是 M 元素)之间进行元素明智的乘积。
您尝试执行的操作是在axis = 1 of A
(M size)上的广播元素明智产品-
C1 = A * B[:,None,:]
您始终可以进行快速测试,以检查您所期望的结果是否实际上是您已实施的结果。
A = np.random.randint(0,5,(2,3,1)) # N,M,d
B = np.random.randint(0,5,(1,1)) # N,d
C2 = np.einsum('ijk,ik->ijk', A, B)
print(C2)
[[[4]
[0]
[8]]
[[4]
[4]
[4]]]
仔细检查两个操作是否相等 =
np.allclose(C1, C2)
##True
更多关于如何np.einsum
工作的细节可以在这里找到。
推荐阅读
- python - 将 Python Kivy 代码转换为 .exe 文件时出现问题
- java - 如何从 java 代理停止/停止主程序/线程
- php - PHP:将内存 sqLite 数据库转储到文件
- android - React Native Build 随机失败
- python - tkinter 和 python 中的多线程
- python - 在 python 3.9 中安装 spacy-readability 时出错
- postgresql - 从 Amazon AMI 将 PSQL 更新到特定版本。2017.03
- java - 最大 RabbitMQ 预取计数
- javascript - 如何在用 excel.js 编写的 excel 文件中保持 JSON 的相同结构?
- html - 角度对话框大小