Python 堆叠多个二维阵列以生成一个三维阵列
我有4个numpy数组,每个数组的形状为(5,5)。我希望将它们堆叠起来,以便获得一个新的形状数组(5,5,4)。我尝试使用:Python 堆叠多个二维阵列以生成一个三维阵列,python,arrays,numpy,Python,Arrays,Numpy,我有4个numpy数组,每个数组的形状为(5,5)。我希望将它们堆叠起来,以便获得一个新的形状数组(5,5,4)。我尝试使用: N = np.stack((a, b, c, d)) 但是,由于我对使用numpy还不熟悉,我无法理解为什么它给出的形状是(4,5,5)而不是(5,5,4)。有没有其他我应该使用的方法?dstack可以工作,但是改变了我的数组,我认为它可以转置它们 例如,4个阵列 [[1,2] [3,4]] [[1,2] [3,4]] [[1,2] [3,4]] [[1,
N = np.stack((a, b, c, d))
但是,由于我对使用numpy还不熟悉,我无法理解为什么它给出的形状是(4,5,5)而不是(5,5,4)。有没有其他我应该使用的方法?dstack可以工作,但是改变了我的数组,我认为它可以转置它们
例如,4个阵列
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
当我期待:
[[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]
[[1,2]
[3,4]]]
这与堆栈的预期效果一样,但会给出(4,2,2)而不是(2,2,4)的形状。根据我的理解,形状是(行、列、深度)我错了吗?我相信你可以将阵列连接起来,并将其重塑为3D阵列,如下所示:
l = [a,b,c,d]
np.concatenate(l).reshape(len(l), *a.shape)
或者,如果希望避免创建该列表并事先知道数组的数量,请执行以下操作:
np.concatenate((a,b,c,d)).reshape(4, *a.shape)
检查共享示例:
a = [[1, 2], [3, 4]]
d = c = b = a
np.concatenate((a,b,c,d)).reshape(4, *np.array(a).shape)
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
默认的stack
在新的第一个轴上连接数组,与np.array((arr,arr,arr))相同。shape
如果给定一个轴
参数,它可以将它们连接为:
In [13]: np.stack((arr,arr,arr), axis=2)
Out[13]:
array([[[1, 1, 1],
[2, 2, 2]],
[[3, 3, 3],
[4, 4, 4]]])
In [14]: _.shape
Out[14]: (2, 2, 3)
np.dstack
做同样的事情,其中d
代表“深度”
最后一个尺寸标注(此处为3)显示为最里面的列
选择一个“通道”将生成二维阵列:
In [17]: np.stack((arr,arr,arr), axis=2)[:,:,0]
Out[17]:
array([[1, 2],
[3, 4]])
对于3个尺寸标注,第一个尺寸标注是块或平面,中间是行。这些名称很方便,可以帮助我们将动作形象化,但在numpy
中没有固有的含义。对于图像,最后一个维度通常称为颜色或通道,大小为3或4。4d图像阵列可以描述为
(batches, height, width, color)
但实际含义取决于处理数组的方式。这对形状有效,但会改变我的数组。。。我得到了5个数组的形状(5,4)。这是预期的行为吗?形状中的第一个维度是深度吗?是的,误解了@yash,这应该是文档,你能举个例子吗?你的预期产出是多少?
(batches, height, width, color)