【发布时间】:2010-12-16 04:58:40
【问题描述】:
在为 NumPy 计算准备数据期间。我很好奇构建方式:
myarray.shape => (2,18,18)
来自:
d1.shape => (18,18)
d2.shape => (18,18)
我尝试使用 NumPy 命令:
hstack([[d1],[d2]])
但它看起来不起作用!
【问题讨论】:
在为 NumPy 计算准备数据期间。我很好奇构建方式:
myarray.shape => (2,18,18)
来自:
d1.shape => (18,18)
d2.shape => (18,18)
我尝试使用 NumPy 命令:
hstack([[d1],[d2]])
但它看起来不起作用!
【问题讨论】:
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)
【讨论】:
arr3=np.dstack([arr1, arr2])
arr1,arr2 是二维数组shape (256,256),arr3:shape(256,256,2)
【讨论】:
(height,width,3)。
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)。
【讨论】:
np.vstack([a[np.newaxis,...],b[np.newaxis,...]]) 很有魅力!谢谢。
只做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)
【讨论】:
vstack(d3, d4[np.newaxis,...]),就像我的回答一样。