使用NumPy从现有的2D数组构造3D数组

26

在准备NumPy计算数据时,我想知道构建的方法:

myarray.shape => (2,18,18)

来自:

d1.shape => (18,18)
d2.shape => (18,18)

我尝试使用NumPy命令:

hstack([[d1],[d2]])

但它似乎不起作用!

4个回答

42

对我来说,只需要执行d3 = array([d1,d2])就可以了:

>>> from numpy import array
>>> # ... create d1 and d2 ...
>>> d1.shape
(18,18)
>>> d2.shape
(18,18)
>>> d3 = array([d1, d2])
>>> d3.shape
(2, 18, 18)

1
我有一个类似的问题。如果我已经有了形状为(2,18,18)的d3数组,并且我想将另一个2-d数组d4(18x18)添加到d3中以创建3-d数组(3,18,18),我该怎么做? - Han Zhengzu
1
你只需要像我的回答一样简单地使用 vstack(d3, d4[np.newaxis,...]) - Eric O. Lebigot
必须使用vstack((d3, d4[np.newaxis,...]))。需要两个'(( ))'。 - user1098761

20

你可以按照Daniel建议的方法直接使用numpy.array([d1, d2])

或者在堆叠它们之前将数组转换为三维数组,方法是添加每个数组的新维度:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ])  # shape = (2, 18, 18)
事实上,d1[newaxis,...].shape == (1, 18, 18),您可以直接堆叠这两个三维数组,得到您想要的新三维数组(d3)。

1
np.vstack([a[np.newaxis,...],b[np.newaxis,...]]) 像魔法一样好用!谢谢。 - thepunitsingh

12
arr3=np.dstack([arr1, arr2])

arr1,arr2是2D数组,形状为(256,256),arr3形状为(256,256,2)


2
可以这样做,因为它也适用于图像上的RGB通道拼接,最终形状必须是(height,width,3) - decadenza

5
< p > np.stack() 函数提供了很多的灵活性。你可以这样说:

>>> d3 = np.stack([d1, d2])
>>> d3.shape
(2, 18, 18)

然而,你也可以指定轴,沿着这个轴将数组连接起来。因此,如果您想要连接RGB图像的通道,则可以这样说:

>>> d3 = np.stack([d1, d2], axis=-1)
>>> d3.shape
(18, 18, 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接