在Python

时间:2016-03-03 14:34:45

标签: python arrays numpy multidimensional-array

这是来自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.

有通用方法吗?谢谢。

1 个答案:

答案 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]))