在Python中选择和迭代多维数组中的特定子数组
这是一个来自这里的帖子的问题 在那篇文章中,user@Cleb解决了我最初的问题:如何通过3d数组中的列执行求和:在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+
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]))