关于python:numpy整形中的-1是什么意思?

What does -1 in numpy reshape mean?

本问题已经有最佳答案,请猛点这里访问。
1
2
 I have a numpy array (A) of shape = (100000, 28, 28)
 I reshape it using A.reshape(-1, 28x28)

这在机器学习管道中非常普遍。
这是如何运作的 ? 我从不了解重塑中的" -1"的含义。

一个确切的问题是
但没有确切的解释。 有什么答案吗?


在numpy中,创建一个100X100项的矩阵,如下所示:

1
2
3
import numpy as np
x = np.ndarray((100, 100))
x.shape  # outputs: (100, 100)

numpy在内部将所有这10000个项目存储在10000个项目的数组中,而与该对象的形状无关,这使我们可以将此数组的形状更改为任意尺寸,只要该数组上的项目数不变

例如,将对象重塑为10X1000就可以了,因为我们保留了10000个项目:

1
x = x.reshape((10, 1000))

重塑为10X2000无法正常工作,因为列表中没有足够的项目

1
2
x.reshape((10, 2000))
ValueError: total size of new array must be unchanged

回到-1问题,它是未知维的表示法,其含义是:
让numpy用正确的值填充缺失的维度,以便我的数组保留相同数量的项目。

所以这:

1
x = x.reshape((10, 1000))

等效于此:

1
x = x.reshape((10, -1))

在内部,numpy所做的只是计算10000 / 10以获取缺少的尺寸。

-1甚至可以位于数组的开头或中间。

以上两个示例与此等效:

1
x = x.reshape((-1, 1000))

如果我们尝试将二维标注为未知,则numpy将引发异常,因为它不知道我们的意思,因为有多种方法可以改变数组的形状。

1
2
x = x.reshape((-1, -1))
ValueError: can only specify one unknown dimension


这意味着,将推断您传递了-1的尺寸的大小。从而,

1
A.reshape(-1, 28*28)

意思是,"重塑A使其第二维的尺寸为28 * 28,并计算第一维的正确尺寸"。

请参阅重塑文档。