从现有二维数组构建三维数组

27 投票
4 回答
44216 浏览
提问于 2025-04-15 15:58

在准备数据以便使用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)。

撰写回答