使用 nditer 进行浅迭代

2022-01-24 00:00:00 python numpy iteration

问题描述

我有这样一个数组:

>>>y = np.random.randint(0, 255, (2,2,3))
>>>array([[[242, 14, 211],
           [198,  7,   0]],

          [[235,  60,  81],
           [164,  64, 236]]])

而且我必须遍历每个 triplet 元素(不幸的是,矢量化对我没有帮助......).所以我尝试了:

And I have to iterate over each triplet element (unfortunately vectorization won't help me here...). So I tried:

for i, j in np.nditer(y):
print y[i, j],

希望我能得到这样的输出:

hoping I'd get such an output:

[242, 14, 211], [198, 7, 0], [235, 60, 81], [164, 64, 236],但运气不好!

我得到错误:

Traceback (most recent call last):

  File "<ipython-input-21-a336ef837a8a>", line 1, in <module>
    for i, j in np.nditer(y):    print y[i,j]

TypeError: iteration over a 0-d array

我很确定我犯了一个非常明显的错误...谁能帮帮我?

I'm quite sure I'm making a very obvious error... can anyone please help me?


解决方案

看起来你只需要把它拉平.您可以使用 itertools 中的 chain 运算符.

It looks like you just need to flatten this down a level. You can use the chain operator from itertools.

from itertools import chain    


y = np.random.randint(0, 255, (2,2,3)
b = chain.from_iterable(y) # where b is a generator

list(b) 输出

[array([ 51, 119,  84]),
 array([ 50, 110, 193]),
 array([165, 157,  52]),
 array([239, 119,  83])]

相关文章