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

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

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

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

ОБНОВЛЕНО:

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

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

Обновлено:

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

Забыл сказать - размещайте пожалуйста код, а не изображения.

kabanus 18.12.2018 09:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
147
3

Ответы 3

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

>>> 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.

Спасибо за ответ. в результате получается массив из 3 строк x 1 столбец. как я могу его переставить? Я запустил transpose (), но результат был тот же

Corse 18.12.2018 08:46

@Corse Я пропустил это - это считается многомерным (форма (1,3), поэтому у вас есть два измерения). См. Редактировать.

kabanus 18.12.2018 08:50

@Corse также обратите внимание, что это не совсем правильно. Существует разница между формой (3,) и формой (3,1) - попробуйте два изменения формы, чтобы увидеть, как на самом деле выглядят 3 строки x 1 столбец.

kabanus 18.12.2018 08:53

что означает (3,)? пустой столбец?

Corse 18.12.2018 08:57

@Corse означает одномерный объект, не имеющий значения для строки и столбца. Я посмотрю на обновление, но имейте в виду, что менять вопросы после получения ответа довольно невежливо - в следующий раз задайте новый вопрос.

kabanus 18.12.2018 09:19

Если вам нужен двумерный массив (строка или столбец), вы можете использовать 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]])    
  • Случай 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)

Другие вопросы по теме