Какой самый простой способ преобразовать список массивов NumPy в один массив NUMPY? - PullRequest
0 голосов
/ 18 декабря 2018

enter image description here

Какой самый простой способ преобразовать список в массив numpy, как показано?

Я пытался numpy.asarray(), но этов результате получилась 3 ось, в которой данные в результирующем массиве были транспонированы, хотя значения объединены.

ОБНОВЛЕНО:

Так что asarray().reshape(1,3) работает с одной строкой.Но элемент в моем списке имеет размер (2,1) или больше, кажется, что изменение формы не транспонируется должным образом.Как я могу это сделать?

enter image description here

Обновлено:

Удалось сделать это за 2 шага: reshape(3,2) затем np.transpose(),Интересно, есть ли одношаговый подход?

Ответы [ 3 ]

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

Если вам нужен 2-D массив (строка или столбец), вы можете использовать np.atleast_2d с np.flatten, как указано выше:

x = np.arange(10).reshape((2,5))
print(x)
>>array([[0, 1, 2, 3, 4],
   [5, 6, 7, 8, 9]])

x_new = np.atleast_2d(x.flatten())
print(x_new) 
>> array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

x_new = np.atleast_2d(x.flatten()).T
print(x_new) 
>> array([[0],
   [1],
   [2],
   [3],
   [4],
   [5],
   [6],
   [7],
   [8],
   [9]])    
0 голосов
/ 18 декабря 2018
  • Случай A: объединить список из трех массивов с формой (1, 1) в массив формы (1, 3)

  • Случай B: объединить списоктри массива с формой (2, 1) в массив формы (2, 3)

Ограничение: сделать это за один шаг.(Предположительно, один «шаг» - это один вызов функции.)

Общий ответ: объединить их!Функция numpy.concatenate() берет список массивов и склеивает их вдоль произвольной оси.Единственным ограничением является то, что форма массивов должна быть одинаковой для всех других измерений.

В следующем примере показано, как объединить список N массивов с формой (K, 1) в массив формы (K, N).

import numpy as np

list_of_arrays = [np.array([[1], [2]]), np.array([[10], [20]]), np.array([[100], [200]])]

assert list_of_arrays[0].shape == (2, 1)
assert list_of_arrays[1].shape == (2, 1)
assert list_of_arrays[2].shape == (2, 1)

result = np.concatenate(list_of_arrays, axis=1)  # single step: list -> array

assert result.shape == (2, 3)
0 голосов
/ 18 декабря 2018

Вы все списки имеют два измерения.Кажется, вы хотите сгладить , что:

>>> x=[[1]]
>>> y=[[2]]
>>> z=[[3]]
>>> np.array((x,y,z)).flatten()
array([1, 2, 3])

Если вы хотите 3 столбца и одну строку, вы можете изменить форму специально:

>>> np.array((x,y,z)).reshape(1,3)
array([[1, 2, 3]])

Обратите внимание, что этодвухмерный.Плоский массив одномерный, поэтому в нем нет смысла строки и столбца - вы можете reshape(3,1) увидеть разницу с массивом 3x1.

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

>>> x=[[1],[2]]
>>> y=[[3],[4]]
>>> z=[[5],[6]]
>>> np.array((x,y,z)).reshape(3,2).T
array([[1, 3, 5],
       [2, 4, 6]])

, и он также вполне оптимален.Использование .T избавит вас от явного вызова np.transpose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...