Что эквивалентно "zip()" в Python numpy?
Я пытаюсь сделать следующее, но с массивами numpy:
x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)]
normal_result = zip(*x)
Это должно дать результат:
normal_result = [(0.1, 0.1, 0.1, 0.1, 0.1), (1., 2., 3., 4., 5.)]
Но если входной вектор является массивом numpy:
y = np.array(x)
numpy_result = zip(*y)
print type(numpy_result)
Он (ожидается) возвращает a:
<type 'list'>
Проблема в том, что после этого мне нужно будет преобразовать результат в массив numpy.
То, что я хотел бы знать, - это то, что есть, если есть эффективная функция numpy, которая позволит избежать этих обратных преобразований?
Ответы
Ответ 1
Вы можете просто транспонировать его...
>>> a = np.array([(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)])
>>> a
array([[ 0.1, 1. ],
[ 0.1, 2. ],
[ 0.1, 3. ],
[ 0.1, 4. ],
[ 0.1, 5. ]])
>>> a.T
array([[ 0.1, 0.1, 0.1, 0.1, 0.1],
[ 1. , 2. , 3. , 4. , 5. ]])
Ответ 2
Попробуйте использовать dstack:
>>> from numpy import *
>>> a = array([[1,2],[3,4]]) # shapes of a and b can only differ in the 3rd dimension (if present)
>>> b = array([[5,6],[7,8]])
>>> dstack((a,b)) # stack arrays along a third axis (depth wise)
array([[[1, 5],
[2, 6]],
[[3, 7],
[4, 8]]])
поэтому в вашем случае это будет:
x = [(0.1, 1.), (0.1, 2.), (0.1, 3.), (0.1, 4.), (0.1, 5.)]
y = np.array(x)
np.dstack(y)
>>> array([[[ 0.1, 0.1, 0.1, 0.1, 0.1],
[ 1. , 2. , 3. , 4. , 5. ]]])