python - 是否有一个 numpy 函数来获取子矩阵的总和?

标签 python numpy

我想得到一个数组,它是数组中子矩阵的总和。

例如,假设我们有一个 3x3 矩阵,其中每个项目都包含一个 2x2 子矩阵:

matrix = np.array([[[[1,2],[3,4]],     [[5,6],[7,8]],     [[9,10],[11,12]]],
                   [[[13,14],[15,16]], [[17,18],[19,20]], [[21,22],[23,24]]],
                   [[[25,26],[27,28]], [[29,30],[31,32]], [[33,34],[35,36]]]])

看起来像:

[[[[ 1  2]
   [ 3  4]]

  [[ 5  6]
   [ 7  8]]

  [[ 9 10]
   [11 12]]]


 [[[13 14]
   [15 16]]

  [[17 18]
   [19 20]]

  [[21 22]
   [23 24]]]


 [[[25 26]
   [27 28]]

  [[29 30]
   [31 32]]

  [[33 34]
   [35 36]]]]

获得答案的一种方法是使用列表理解

ans = [ [ np.sum(sub_matrices) for sub_matrices in row ] for row in matrix ]

这将是:

[[10, 26, 42], [58, 74, 90], [106, 122, 138]]

我想知道是否有更好的方法来获得这个结果。也许使用一些内置的 numpy 函数?

最佳答案

使用 einsum这在这种情况下比传统的 sum 更快:

np.einsum('ijkl->ij',matrix)

array([[ 10,  26,  42],
       [ 58,  74,  90],
       [106, 122, 138]])

关于python - 是否有一个 numpy 函数来获取子矩阵的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166563/

相关文章:

python - 如何以编程方式获取 python.exe 位置?

python - 计算给定线 start(x,y) end(x,y) 上的投影点位置 (x,y)

python - 执行矩阵乘法时出现内存错误

arrays - 通过 Cython 从 C++ 到 NumPy 的指针数组

python - 一像素宽曲线的曲率

python - 从 numpy.timedelta64 值中提取天数

python - 防止 Python 包重新导出导入的名称

具有大型数组的 Windows 上的 Python 多处理

python - 如何通过 Python 抓取动态网页

Python cometd 服务器