在Python中选择和迭代多维数组中的特定子数组

在Python中选择和迭代多维数组中的特定子数组,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,这是一个来自这里的帖子的问题 在那篇文章中,user@Cleb解决了我最初的问题:如何通过3d数组中的列执行求和: import numpy as np arra = np.arange(16).reshape(2, 2, 4) 给 array([[[0, 1, 2, 3], [4, 5, 6, 7]], [[8, 9, 10, 11], [12, 13, 14, 15]]]) 问题是如何计算每个矩阵中的列之和,即。e、 ,0+4,1+

这是一个来自这里的帖子的问题

在那篇文章中,user@Cleb解决了我最初的问题:如何通过3d数组中的列执行求和:

 import numpy as np
 arra = np.arange(16).reshape(2, 2, 4)  

 array([[[0, 1, 2, 3],  
     [4, 5, 6, 7]],  
     [[8, 9, 10, 11],  
     [12, 13, 14, 15]]])  
问题是如何计算每个矩阵中的列之和,即。e、 ,0+4,1+5,8 + 12, ..., 11 + 15. 由@Cleb解决

然后我想知道在0+8,1+9,…,4+12,…,7+15(奇数和偶数列)的和的情况下如何处理它,@Cleb也解决了这个问题

但我想知道是否有一个总体思路(可以在每个具体情况下进行修改)。假设您可以分别在列中添加第一行、最后一行和中心行,即。e、 ,0+12,1+13,…,3+15,4+8,5+9,…,7+11


有一般的方法吗?谢谢。

根据
arra
的确切定义,您可以使用以下方法适当地移动值:

arra_mod
然后如下所示:

array([[[12, 13, 14, 15],
        [ 0,  1,  2,  3]],

       [[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]])
现在,您只需使用来自的命令即可获得所需的输出:

map(sum, arra_mod)
[array([12, 14, 16, 18]), array([12, 14, 16, 18])]
这将为您提供所需的输出:

map(sum, arra_mod)
[array([12, 14, 16, 18]), array([12, 14, 16, 18])]
您还可以使用列表

[sum(ai) for ai in arra_mod]
这将提供相同的输出

如果您喜欢一个班轮,您可以简单地执行以下操作:

map(sum, np.roll(arra, arra.shape[2]))