沿轴迭代numpy.ndarray

时间:2018-12-30 14:17:34

标签: python-3.x numpy

假设我有一个3D数组arr。我想以这样的方式遍历arr:每次迭代都沿z-axis产生一个向量。可以这样做,但解决方案并未推广。如果arr.shape和必须沿着其获取矢量的轴未知或可变,则似乎没有直接的方法可以做到这一点。谁能提供解决方案?

for line in np.nditer(arr, axis=2):
    # Perform operation on line


arr = array(
      [[[2, 2, 8, 8],
        [6, 2, 1, 5],
        [4, 5, 1, 4]],

       [[7, 4, 7, 4],
        [0, 0, 3, 3],
        [7, 6, 8, 0]]]
)

预期输出:

[2 2 8 8]
[6 2 1 5]
[4 5 1 4]
[7 4 7 4]
[0 0 3 3]
[7 6 8 0]

2 个答案:

答案 0 :(得分:0)

numpy数组中,shape为您提供有关每个维度中的# dimensions# elements的信息。有了您的代码,我们得到了

print(arr.shape)
# (2,3,4)
# 3-D array
#   along x-axis = 2 elements each
#   along y-axis = 3 elements each
#   along z-axis = 4 elements each

因此,如果我要查看z-axisx-axis的所有y-axis元素,则看起来像

for xid in range(arr.shape[0]):     # for each x-axis
    for yid in range(arr.shape[1]): # for each y-axis
        print(arr[xid, yid, :])     # All elements in z-axis    

答案 1 :(得分:0)

@hpaulj的建议写成答案。

运动轴似乎是正确的答案。但是apply_along_axis很直观,也很容易使用。