Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 堆叠多个二维阵列以生成一个三维阵列_Python_Arrays_Numpy - Fatal编程技术网

Python 堆叠多个二维阵列以生成一个三维阵列

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,

我有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,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)