我如何遍历numpy 3d数组

时间:2018-09-11 14:43:05

标签: python loops numpy

所以我有一个数组:

array([[[27, 27, 28],
        [27, 14, 28]],

       [[14,  5,  4],
        [ 5,  6, 14]]])

我该如何遍历它,并在每次迭代中都获得[a,b,c]值,我会这样尝试:

for v in np.nditer(a):
    print(v)

但它只是打印

27
27
28
27
14
28
14
5
4
5
6

我需要:

[27 27 28]
[27 14 28]...

4 个答案:

答案 0 :(得分:1)

b = a.reshape(-1, 3)
for triplet in b:
    ...

答案 1 :(得分:0)

您可以做些丑陋的事情

for i in range(len(your_array)):
    for j in range(len(your_array[i])):
        print(your_array[i][j])

答案 2 :(得分:0)

认为它在数组中具有数组。因此,在数组 v 中,您具有数组 a ,该数组又包含三元组 b

import numpy as np
na = np.array

v=na([[[27, 27, 28], [27, 14, 28]], [[14,  5,  4],[ 5,  6, 14]]])

for a in v:
    for b in a:
        print b

输出:

[27 27 28]
[27 14 28]
[14  5  4]
[ 5  6 14]

或者,您可以执行以下操作

v2 = [b for a in v for b in a]

现在,您所有的三胞胎都存储在 v2

[array([27, 27, 28]),
 array([27, 14, 28]),
 array([14,  5,  4]),
 array([ 5,  6, 14])]

..您可以像访问一维数组一样访问它们,例如

print v2[0]

给..

array([27, 27, 28])

答案 3 :(得分:0)

将数组A(形状为n1, n2, 3)重塑为数组B(形状为n1 * n2, 3),并迭代B。请注意,B只是A的视图。 AB在内存中共享相同的数据块,但是它们具有不同的数组头信息,这些信息记录了它们的形状,并且B中的更改值也将更改A'的价值。下面的代码:

    a = np.array([[[27, 27, 28],[27, 14, 28]],
                  [[14,  5,  4],[ 5,  6, 14]]])   
    b = a.reshape((-1, 3))   
    for last_d in b:
        a, b, c = last_d
        # do something with last_d or a, b, c