将2D numpy数组列表转换为一个3D numpy数组?

时间:2010-12-03 00:15:06

标签: python numpy

我有一个数百个10x10阵列的列表,我想将它们堆叠成一个Nx10x10阵列。起初我尝试了一个简单的

newarray = np.array(mylist)

但是返回的是“ValueError:使用序列设置数组元素。”

然后我找到了dstack()的在线文档,看起来很完美:“......这是将2D数组(图像)堆叠成单个3D数组进行处理的简单方法。”这正是我想要做的。然而,

newarray = np.dstack(mylist)

告诉我“ValueError:数组维度必须同意,除了d_0”,这很奇怪,因为我的所有数组都是10x10。我想也许问题是dstack()需要一个元组而不是一个列表,但是

newarray = np.dstack(tuple(mylist))

产生了相同的结果。

此时我花了大约两个小时在这里和其他地方搜索,以找出我做错了什么和/或如何正确地解决这个问题。我甚至尝试将我的数组列表转换为列表列表然后再转换为3D数组,但这也不起作用(我最终得到了数组列表的列表,接着是“设置数组元素”作为序列“再次出错。”

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:24)

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)