Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 为什么在矩阵X上使用重塑函数时使用(X.shape[0],-1)作为参数?_Python_Arrays_Reshape - Fatal编程技术网

Python 为什么在矩阵X上使用重塑函数时使用(X.shape[0],-1)作为参数?

Python 为什么在矩阵X上使用重塑函数时使用(X.shape[0],-1)作为参数?,python,arrays,reshape,Python,Arrays,Reshape,在学习deeplearning.ai课程时,我需要立即使用numpy.reformate()。然而,在这样做的同时,我在课程笔记本中得到指示,要以一种特定的方式来做。 目的是将四维向量转换为二维向量 // 说明: 为了方便起见,现在应该在shape(num\u px)的numpy数组中重塑shape(num\u px,num\u px,3)的图像∗∗ num_px∗∗ 3、1)。在此之后,我们的训练(和测试)数据集是一个numpy数组,其中每列表示一个展平的图像。应该有m_列(分别为m_测试)列

在学习
deeplearning.ai
课程时,我需要立即使用
numpy.reformate()
。然而,在这样做的同时,我在课程笔记本中得到指示,要以一种特定的方式来做。 目的是将四维向量转换为二维向量

// 说明:

为了方便起见,现在应该在shape
(num\u px)的numpy数组中重塑shape(num\u px,num\u px,3)的图像∗∗ num_px∗∗ 3、1)
。在此之后,我们的训练(和测试)数据集是一个numpy数组,其中每列表示一个展平的图像。应该有m_列(分别为m_测试)列

练习:重塑训练和测试数据集,以便将大小
(num_px,num_px,3)
的图像展平为形状
(num_px)的单个向量∗∗ num_px∗∗ 3、1)

当你想将形状为(A,b,c,d)的矩阵X展平为形状为(b)的矩阵X_展平时的技巧∗∗C∗∗d、 a)使用:

X_flatten = X.reshape(X.shape[0], -1).T  


(X.T is the transpose of X)
我无法理解为什么参数是这样给出的?
另外,在处理代码时,将“-1”更改为任何负整数都不会更改输出

我假设您使用的是MNIST数据集,因此您有n个大小为m*m*3的图像。让我们假设n到100,m到8。因此,您有100个大小为8*8的RGB图像(3个通道),从而使您的数据形状为100,8,8,3。现在,您想展平100幅图像中的每一幅,这样您可以循环遍历数据集,一幅一幅地展平它,也可以对其进行重塑

您决定通过以下方式对其进行重塑:

X.reshape(X.shape[0], -1).T
让我们把它再解压缩一点,
X.shape[0]
将为您提供100。shape将返回一个元组(100,8,8,3),因为这是数据集的形状,您可以访问它的第0个元素,即100,因此

X.reshape(100, -1).T
这样做的目的是重塑阵列,但确保仍有100个图像,-1表示您不关心结果将重塑为什么形状,因此它会自动从原始形状推断形状。以前您有一个形状为100,8,8,3的四维数组,但现在您要将其重塑为二维数组,您指定100应该是形状的维度0,因此numpy推断,要将其重塑为这样的二维形状,必须将其展平,因此100,8*8*3是输出形状

在那之后,你只需将它转置

另外,这也是numpy文档中的说明

新形状应与原始形状兼容。如果 整数,则结果将是该长度的一维数组。一个形状 维度可以是-1。在本例中,该值是从 数组的长度和剩余维度