Я использую NumPy. У меня есть матрица с 1 столбцом и N строк, и я хочу получить массив из N элементов.
Например, если у меня есть M = matrix([[1], [2], [3], [4]])
, я хочу получить A = array([1,2,3,4])
.
Для достижения этого я использую A = np.array(M.T)[0]
. Кто-нибудь знает более элегантный способ получить тот же результат?
Спасибо!
Ответы:
Если вы хотите что-то более читабельное, вы можете сделать это:
Эквивалентно, вы также можете сделать:,
A = np.asarray(M).reshape(-1)
но это немного сложнее для чтения.источник
numpy.matrix
- это немного спорный вопрос, но недоверчивые разработчики очень согласны с вами в том, что наличие обоих является непитонным и раздражающим по целому ряду причин. Однако количество старого, не поддерживаемого кода «в дикой природе», которое используетmatrix
его, затрудняет его полное удаление.sklearn
). На самом деле существуют различныеsparse matrix
типыscipy
, которые позволяют эффективный доступ через строки или столбцы. Я полагаю, что это может быть проблемой для объединения концепций матрицы и массива. Тем не менее, мне интересно, можно ли было бы также ввестиsparse array
тип и есть ли планы сделать это. Есть какие-нибудь подсказки?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
источник
зависит от того, что вы подразумеваете под элегантностью я полагаю, но это то, что я хотел бы сделать
источник
Вы можете попробовать следующий вариант:
источник
Если вы заботитесь о скорости; Но если вы заботитесь о памяти:
источник
Или вы можете попытаться избежать некоторых временных
источник
Во-первых,
Mv = numpy.asarray(M.T)
который дает вам массив 4x1, но 2D.Затем выполните
A = Mv[0,:]
, что дает вам то, что вы хотите. Вы могли бы собрать их вместе, какnumpy.asarray(M.T)[0,:]
.источник
Это преобразует матрицу в массив
источник
Функции ravel () и flatten () из numpy - это два метода, которые я бы попробовал здесь. Я хотел бы добавить к сообщениям, сделанным Джо , Сираджем , Бублом и Кевадом .
Равель:
Свести:
numpy.ravel()
быстрее , так как это функция уровня библиотеки, которая не делает никакой копии массива. Однако любое изменение в массиве A будет перенесено в исходный массив M, если вы используетеnumpy.ravel()
.numpy.flatten()
медленнее, чемnumpy.ravel()
. Но если вы используетеnumpy.flatten()
для создания А, то изменения в не будут перенесены на оригинальный массив M .numpy.squeeze()
иM.reshape(-1)
медленнее, чемnumpy.flatten()
иnumpy.ravel()
.источник