Скажем, у меня есть массив a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Я хотел бы преобразовать его в одномерный массив (т.е. вектор-столбец):
b = np.reshape(a, (1,np.product(a.shape)))
но это возвращается
array([[1, 2, 3, 4, 5, 6]])
что не то же самое, что:
array([1, 2, 3, 4, 5, 6])
Я могу взять первый элемент этого массива, чтобы вручную преобразовать его в одномерный массив:
b = np.reshape(a, (1,np.product(a.shape)))[0]
но это требует от меня знать, сколько измерений имеет исходный массив (и объединять [0] при работе с более высокими измерениями)
Есть ли независимый от размеров способ получения вектора столбца / строки из произвольного массива?
ravel()
возвращает представление, но это не всегда так. Есть случаи, когдаravel()
возвращается копия. </a.ravel()
выглядит примерно в три раза быстрееa.reshape(-1)
.a.flatten()
это намного медленнее, так как он должен сделать копию.или просто:
источник
b = a.reshape(-1)
для краткости в первом примере.Один из самых простых способов - использовать
flatten()
, как в следующем примере:Мой массив это было так:
После использования
flatten()
:Это также решение ошибок этого типа:
источник
Для списка массивов с разным размером используйте следующее:
Вывод:
[1 2 3 4 5 6 7 8]
источник
a
спиныb
?Я хотел увидеть результаты теста функций, упомянутых в ответах, включая unutbu .
Также хочу отметить, что NumPyDOC рекомендует использовать
arr.reshape(-1)
в случае, если представление является предпочтительным. (хотяravel
это немного быстрее в следующем результате)эталонный тест
Функции:
np.ravel
: возвращает вид, если возможноnp.reshape(-1)
: возвращает вид, если возможноnp.flatten
: возвращает копиюnp.flat
: возвращаетсяnumpy.flatiter
. похожий наiterable
numpy версия: '1.18.0'
Время исполнения на разные
ndarray
размерыВывод
Используемый код
источник
Хотя это не использует формат массива np, (лениво изменять мой код) это должно делать то, что вы хотите ... Если вы действительно хотите вектор столбца, вы захотите транспонировать результат вектора. Все зависит от того, как вы планируете использовать это.
Так что если вам нужно транспонировать, вы можете сделать что-то вроде этого:
источник