这是来自Iterating and selecting a specific array from a multidimensional array in Python
帖子的问题在该帖子中,用户@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]]])
问题是如何在每个矩阵中执行列的总和,i。例如,0 + 4,1 + 5,......,8 + 12,......,11 + 15.它由@Cleb解决。
然后我想知道如何在0 + 8,1 + 9,...,4 + 12,...,7 + 15,(奇数和偶数列)的总和的情况下这样做,这也是由@Cleb解决。
但后来我想知道是否有一个大概(可以在每个特定情况下修改)。想象一下,你可以分别在列中添加第一行和最后一行以及中心行,i。例如,0 + 12,1 + 13,...,3 + 15,4 + 8,5 + 9,...,7 + 11.
有通用方法吗?谢谢。
答案 0 :(得分:1)
根据arra
的确切定义,您可以使用np.roll
正确移动值:
arra_mod = np.roll(arra, arra.shape[2])
arra_mod
然后如下所示:
array([[[12, 13, 14, 15],
[ 0, 1, 2, 3]],
[[ 4, 5, 6, 7],
[ 8, 9, 10, 11]]])
现在,您只需使用previous question中的命令即可获得所需的输出:
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]))