【发布时间】:2020-12-17 14:04:16
【问题描述】:
我有一个任意形状(N1,N2,k,k) 的矩阵矩阵,意思是N1*N2 形状为k*k 的矩阵。
我希望计算每个矩阵(形状为(k,k))的总和,并用该总和转换矩阵本身。
结果数组的形状为(N1,N2),其中位于某个索引i,j 中的每个元素都是该给定索引中相应矩阵的总和。
numpy 操作有没有办法做到这一点? (也就是说 - 没有循环 range(N1) 和 range(N2))
这是一个简单的示例(我使用* 与第一个数组和第二个数组转置只是为了创建示例):
m = np.array([[0, 0, 0, 0]]).reshape(2, 2) # matrix element of size k*k (k=2)
a = np.array([m, m + 1, m + 2, m + 3])
b = np.array([m, m + 1, m + 2, m + 3])
reshaped1 = a[:, np.newaxis] # (N1,1,k,k) where N1=4
reshaped2 = b[np.newaxis, :] # (1,N2,k,k) where N2=4
mult = reshaped1 * reshaped2 # (N1,N2,k,k)=(4,4,2,2)
我希望创建一个新数组res,它将包含所有mult 元素的总和。这可以通过以下伪代码来完成:
for i in range(N1):
for j in range(N2):
res[i,j] = sum(mult[i,j])
感谢您的帮助!
【问题讨论】:
-
花时间阅读
np.sum的文档。许多numpy函数和方法都有axis或axes参数。在这种情况下是你的朋友。
标签: python arrays numpy matrix