Что такое эквивалент "zip ()" в numpy Python?
Я пытаюсь сделать следующее, Но с массивы 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, которая позволит избежать этих взад-вперед преобразования?
2 ответов:
вы можете просто перенести ее...
>>> 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. ]])
попробуйте использовать 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. ]]])
Comments