Подтвердить что ты не робот

Матрица для преобразования в массив

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 3

A, = np.array(M.T)

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

Ответ 4

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

result=np.array(M).flatten()

Ответ 5

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

A = M.view(np.ndarray)
A.shape = -1

Ответ 6

np.array(M).ravel()

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

np.asarray(M).ravel()

Ответ 7

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

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

Ответ 8

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

A = np.ravel(M).T

Ответ 9

Хороший способ, который позволит выбрать соглашение, которое вы предпочитаете (row major, col major...)

A = M.flatten()

Просмотрите документацию, чтобы просмотреть параметры

Ответ 10

Функции 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, то изменения в не будут перенесены в исходный массив 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