Преобразовать список двумерных массивов в один трехмерный массив? - PullRequest
11 голосов
/ 03 декабря 2010

У меня есть список из нескольких сотен массивов 10x10, которые я хочу объединить в один массив Nx10x10.Сначала я попробовал простой

newarray = np.array(mylist)

Но это вернулось с «ValueError: установка элемента массива с последовательностью.»

Затем я нашел онлайн-документацию дляdstack (), который выглядел идеально: «... Это простой способ объединить 2D-массивы (изображения) в один 3D-массив для обработки».Именно это я и пытаюсь сделать.Однако

newarray = np.dstack(mylist)

говорит мне «ValueError: размеры массива должны совпадать, за исключением d_0», что странно, потому что все мои массивы имеют размер 10x10.Возможно, проблема в том, что dstack () ожидает кортеж вместо списка, но

newarray = np.dstack(tuple(mylist))

дает тот же результат.

В этот момент я потратил около двух часов на поискздесь и в других местах, чтобы узнать, что я делаю неправильно и / или как правильно поступить.Я даже пытался преобразовать мой список массивов в список списков списков, а затем обратно в трехмерный массив, но это тоже не сработало (в итоге я получил списки списков массивов, за которыми последовал элемент «setting array»как последовательность "ошибка снова).

Любая помощь будет оценена.

1 Ответ

24 голосов
/ 03 декабря 2010
newarray = np.dstack(mylist)

должно работать. Например:

import numpy as np

# Here is a list of five 10x10 arrays:
x=[np.random.random((10,10)) for _ in range(5)]

y=np.dstack(x)
print(y.shape)
# (10, 10, 5)

# To get the shape to be Nx10x10, you could  use rollaxis:
y=np.rollaxis(y,-1)
print(y.shape)
# (5, 10, 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...