从现有二维数组构建三维数组
在准备数据以便使用NumPy进行计算时,我想知道怎么构建:
myarray.shape => (2,18,18)
从:
d1.shape => (18,18)
d2.shape => (18,18)
我尝试使用NumPy的命令:
hstack([[d1],[d2]])
但是看起来不太管用!
4 个回答
13
arr3=np.dstack([arr1, arr2])
arr1和arr2是二维数组,形状是(256,256)
,也就是说它们各有256行和256列。arr3是一个三维数组,形状是(256,256,2)
,这表示它有256行、256列,并且在每个位置上有2个值。
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)
20
hstack 和 vstack 这两个方法不会改变数组的维度,它们只是把数组“并排放”。所以,当你把两个二维数组合并时,得到的仍然是一个新的二维数组,而不是三维数组!
你可以按照 Daniel 的建议,直接使用 numpy.array([d1, d2])
来实现。
另外,你也可以在把数组合并之前,先把它们转换成三维数组,这样就可以通过给每个数组添加一个新维度来实现:
d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ]) # shape = (2, 18, 18)
实际上,d1[newaxis,...].shape == (1, 18, 18)
,这样你就可以直接把两个三维数组合并,得到你想要的新三维数组(d3
)。