【发布时间】:2021-04-18 03:31:56
【问题描述】:
我有一个 4D Numpy 形状数组(15、2、320、320)。换句话说,[320 x 320] 矩阵的每个元素都是大小为 [15 x 2] 的矩阵。现在,我想计算 [320x320] 矩阵的每个元素的点积,然后提取对角线数组。
目前,我正在使用 2 个“for”循环,并且代码运行良好(参见 sn-p)。但是,计算速度太慢(当我处理大数据时)。任何人都可以告诉我如何在没有循环的情况下对计算进行矢量化。
A = np.random.rand(15, 2, 320, 320)
B = np.zeros((2, 320, 320)) # store the final results
for row in range (320):
for col in range (320):
C = np.dot(A[:, :, row, col].T, A[:, :, row, col]) # the shape of C is [2 x 2]
C = np.diag(C)
B[:, row, col] = C
任何帮助或建议将不胜感激!
【问题讨论】:
-
您的前两句话相互矛盾。请重新确认形状是
(15,2,320,320)还是(320,320,15,2) -
另外,预期的输出形状是什么。您的输出产生的形状为 (2,320,320)
-
感谢@fountainhead 和@Akshay Sehgal。输入数组 A 的形状为 (15, 2, 320, 320)。输出数组 B 的预期形状为 (2, 320, 320)
标签: python arrays numpy matrix-multiplication