2010-12-03 231 views
5

我有一个数百个10x10阵列的列表,我想将它们堆叠到一个Nx10x10阵列中。起初,我尝试了简单的将2D numpy数组列表转换为一个3D numpy数组?

newarray = np.array(mylist)

但与返回“ValueError异常:设置一个数组元素与序列”

然后我发现对于dstack)的在线文档(,看上去完美:“...这是堆叠二维数组(图像)转换成用于处理的单个3D阵列的简单方法。”这正是我想要做的。然而,

newarray = np.dstack(mylist) 

告诉我:因为我所有的数组是10×10这是奇怪的“ValueError异常阵列的尺寸必须除D_0同意”。我想也许问题是dstack()期望一个元组而不是一个列表,但是

newarray = np.dstack(tuple(mylist)) 

产生了相同的结果。

在这一点上我花了约两个小时的搜索在这里和其他地方,找出我在做什么错误和/或如何去正确此。我甚至试图将我的数组列表转换为列表列表,然后返回到3D数组中,但这也不起作用(我最终列出了数组列表,然后是“设置数组元素作为序列“错误再次)。

任何帮助,将不胜感激。

+1

当你做类似`[item.shape for item in item,item item = [(10,10)]``时,你会得到什么? (即是你_really_确保所有的阵列具有相同的形状?) – 2010-12-03 05:13:01

+1

dstack你去哪儿了我所有的生活..我一直在使用hstack和vstack与[:,:,newaxis]垃圾 – wim 2011-05-29 03:32:59

回答

13
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)