我如何遍历 numpy 3d 数组

新手上路,请多包涵

所以我有一个数组:

 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]...

原文由 karambaq 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 371
1 个回答

显然你想迭代数组的前 2 个维度,返回第 3 个维度(作为 1d 数组)。

 In [242]: y = np.array([[[27, 27, 28],
     ...:         [27, 14, 28]],
     ...:
     ...:        [[14,  5,  4],
     ...:         [ 5,  6, 14]]])

双循环很好,重塑为 (4,2) 和迭代也是如此。

nditer 通常不需要,也不鼓励将其作为迭代机制(其文档需要更强的免责声明)。它确实适用于 C 级代码。它在 Python 级代码中用得不多。一个例外是 np.ndindex 函数,它在这种情况下很有用:

 In [244]: for ij in np.ndindex(y.shape[:2]):
     ...:     print(ij, y[ij])
     ...:
(0, 0) [27 27 28]
(0, 1) [27 14 28]
(1, 0) [14  5  4]
(1, 1) [ 5  6 14]

ndindex 使用 nditermulti_index 指定形状的临时数组上的模式。

尽可能尝试在没有迭代的情况下工作。使用任何这些技巧的迭代都相对较慢。

原文由 hpaulj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏