想象我有这样的事情:迭代和多维数组在Python
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]]])
,我想使沿特定子阵列运行一个循环(在这种情况下,我想沿每个'矩阵'的每个'列')运算结果(即选择0和4并将它们相加(4),选择1和5并将它们相加(6), ...,选择3和7并将它们相加(10),选择8和12并将它们相加(20),...,选择11和15并将它们相加(26))。
我原以为这样做与自然明显:
for i in arra[i, j, k]:
for j in arra[i, j, k]:
for k in arra[i, j, k]:
sum...
问题是Python的肯定不允许做什么,我想用这种方式。如果它是二维数组,它会更容易,因为我知道迭代器首先遍历行,所以可以转置为沿列运行,但对于多维(此例中为3D)数组(N,M,P)与N,M,P >> 1,我想知道如何做到这一点。
编辑:这个问题在这里有一个延续:Choosing and iterating specific sub-arrays in multidimensional arrays in Python
谢谢,你的回答是非常有用的,但我想知道...,想象你有兴趣,在与前面相同的例子中,总结偶数行的值,即0 + 8,1 + 9 ,2 + 10,...,4 + 12,7 + 15(按列求和,但以偶数行求和)。有没有一个通用的方法来做到这一点? – David
@大卫:当然。我编辑了我的答案,并为此添加了解决方案。 – Cleb
谢谢,但我仍然想知道是否有更通用的方法。想象一下,我想添加第一个与最后一个,中间,即0 + 12,1 + 13,...,4 + 8,5 + 9,... 7 + 11。还有可能吗?你需要巧妙的坐标转换吗? – David