从现有的2d数组中构造numpy中的3d数组

时间:2009-11-13 07:20:38

标签: python numpy

准备NumPy计算数据时。我很想知道如何构建:

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

来自:

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

我尝试使用NumPy命令:

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

但它看起来不起作用!

4 个答案:

答案 0 :(得分:26)

只是做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 :(得分:7)

hstack和vstack不会改变数组的维数:它们只是将它们“并排”。因此,组合二维数组会创建一个新的二维数组(而不是3D数组!)。

你可以做丹尼尔建议的(直接使用numpy.array([d1, d2]))。

您也可以在堆叠数组之前将数组转换为3D数组,方法是为每个数组添加一个新维度:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ])  # shape = (2, 18, 18)

实际上,d1[newaxis,...].shape == (1, 18, 18),您可以直接堆叠两个3D数组并获得所需的新3D数组(d3)。

答案 2 :(得分:0)

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

arr1,arr2是2d数组shape (256,256),arr3:shape(256,256,2)

答案 3 :(得分:0)

result = [[[a[0], b[1]] for a, b in zip(x, [*x[1:], x[0]])] for x in total_path] 函数提供了很多功能。你可以说:

np.stack()

然而,您也可以指定轴,数组沿该轴连接。因此,如果您想加入 RGB 图像的通道,您可以说:

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