如何在将numpy数组与例如numpy数组进行交互时设置迭代深度nditer?

时间:2018-06-10 13:23:35

标签: python numpy opencv

supose我有以下数组,表示rgb图像的结构:

[[[ 0,  1,  2], [ 3,  4,  5]]
 [[ 6,  7,  8], [ 9, 10, 11]]
 [[12, 13, 14], [15, 16, 17]]]

如何迭代像素,例如[0,1,2]然后[3,4,5],并收到相应的指数? 使用numpys nditer函数,我无法定义它应该停止的深度/轴,因此它将迭代每个值,例如, 0然后1然后2依旧等等。

我可以定义迭代深度吗?

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题你可以使用一个简单的嵌套循环

A = np.array([[[ 0,  1,  2], [ 3,  4,  5]],
              [[ 6,  7,  8], [ 9, 10, 11]],
              [[12, 13, 14], [15, 16, 17]]])

for i in range(A.shape[0]):
    for j in range(A.shape[1]):
        print(i, j, A[i,j,...])

0 0 [0 1 2]
0 1 [3 4 5]
1 0 [6 7 8]
1 1 [ 9 10 11]
2 0 [12 13 14]
2 1 [15 16 17]

或者,使用np.ndindex更多 numpythonic 方式

for i in np.ndindex(A.shape[:2]):
    print(i, A[i])

(0, 0) [0 1 2]
(0, 1) [3 4 5]
(1, 0) [6 7 8]
(1, 1) [ 9 10 11]
(2, 0) [12 13 14]
(2, 1) [15 16 17]