У меня есть список массивов 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
выдать одноэлементный кортеж при итерации по списку из одного массива?