【发布时间】:2019-08-22 08:06:58
【问题描述】:
我有一个形状相同的 Numpy 数组列表(但不一定相同 dtype),我想同时迭代所有数组的元素。例如,如果数组是:
>>> a = np.array([[1,2,3], [4,5,6]])
>>> b = np.array([['one','two','three'],['four','five','six']])
我希望对 [a, b] 的迭代产生
[(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five'), (6, 'six')]
我发现numpy.nditer几乎能满足我的需要。这有效:
>>> for x, y in np.nditer([a, b]):
... print('{} {}'.format(x, y))
1 one
2 two
3 three
4 four
5 five
6 six
请注意,迭代器会产生标量元组:
>>> next(np.nditer([a, b]))
(array(1), array('one', dtype='<U5'))
但是,在包含一个数组的列表的极端情况下,np.nditer 直接产生数组元素:
>>> next(np.nditer([a]))
array(1)
我需要它来生成一个包含一个元素的元组,因为我在循环中解压缩函数参数中的迭代值。
我如何说服np.nditer 在遍历一个数组的列表时产生一个单元素元组?
【问题讨论】:
标签: python arrays numpy iteration