Матрица в массиве - PullRequest
       11

Матрица в массиве

134 голосов
/ 26 июля 2010

Я использую NumPy.У меня есть матрица с 1 столбцом и N строками, и я хочу получить массив с N элементами.

Например, если у меня есть M = matrix([[1], [2], [3], [4]]), я хочу получить A = array([1,2,3,4]).

Для этого я использую A = np.array(M.T)[0].Кто-нибудь знает более элегантный способ получить тот же результат?

Спасибо!

Ответы [ 9 ]

173 голосов
/ 26 июля 2010

Если вы хотите что-то более читабельное, вы можете сделать это:

A = np.squeeze(np.asarray(M))

Эквивалентно, вы также можете сделать: A = np.asarray(M).reshape(-1), но это немного сложнее для чтения.

110 голосов
/ 24 декабря 2013
13 голосов
/ 27 октября 2012
A, = np.array(M.T)

зависит от того, что вы подразумеваете под элегантностью, я полагаю, это то, что я бы сделал

9 голосов
/ 24 декабря 2013

Вы можете попробовать следующий вариант:

result=np.array(M).flatten()
6 голосов
/ 11 июня 2015
np.array(M).ravel()

Если вы заботитесь о скорости; Но если вы заботитесь о памяти:

np.asarray(M).ravel()
6 голосов
/ 17 августа 2012

Или вы можете попытаться избежать некоторых темпов с

A = M.view(np.ndarray)
A.shape = -1
2 голосов
/ 23 августа 2016

Это преобразует матрицу в массив

A = np.ravel(M).T
2 голосов
/ 19 августа 2015

Сначала Mv = numpy.asarray(M.T), что дает вам массив 4x1, но 2D.

Затем выполните A = Mv[0,:], что даст вам то, что вы хотите. Вы можете собрать их вместе, как numpy.asarray(M.T)[0,:].

0 голосов
/ 16 декабря 2018

ravel () и flatten () функции от numpy - это две техники, которые я бы попробовал здесь. Я хотел бы добавить к сообщениям, сделанным Джо , Сирадж , пузырь и Кевад .

Равель:

A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)

Сглаживание:

M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)

numpy.ravel() быстрее , так как это функция уровня библиотеки, которая не делает никакой копии массива. Однако любое изменение в массиве A переносится на исходный массив M, если вы используете numpy.ravel().

numpy.flatten() медленнее, чем numpy.ravel(). Но если вы используете numpy.flatten() для создания A, то изменения в A не будут перенесены в исходный массив M .

numpy.squeeze() и M.reshape(-1) медленнее, чем numpy.flatten() и numpy.ravel().

%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop

%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop

%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop

%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop
...