I have a numpy array (A) of shape = (100000, 28, 28)
I reshape it using A.reshape(-1, 28x28)
这在机器学习管道中非常常见。 这是如何运作的 ?我从来没有理解重塑中“-1”的含义。
一个确切的问题是this 但没有可靠的解释。有什么答案吗?
答案 0 :(得分:14)
在numpy中,创建一个100X100项的矩阵是这样的:
import numpy as np
x = np.ndarray((100, 100))
x.shape # outputs: (100, 100)
numpy内部将所有10000个项目存储在10000个项目的数组中,无论此对象的形状如何,这允许我们将此数组的形状更改为任何维度,只要数组上的项目数量不会改变
例如,将我们的对象重塑为10X1000是正常的,因为我们保留了10000个项目:x = x.reshape((10, 1000))
重塑到10X2000不会工作,因为我们在列表中没有足够的项目
x.reshape((10, 2000))
ValueError: total size of new array must be unchanged
回到-1
问题,它的作用是未知维度的符号,意思是:
让numpy用正确的值填充缺少的维度,这样我的数组就会保留相同数量的项目。
所以这个:
x = x.reshape((10, 1000))
相当于:
x = x.reshape((10, -1))
内部numpy所做的只是计算10000 / 10
以获得缺失的维度。
-1
甚至可以在数组的开头或中间。
以上两个例子相当于:
x = x.reshape((-1, 1000))
如果我们尝试将两个维度标记为未知,numpy将引发异常,因为它无法知道我们的含义,因为有多种方法可以重新整形数组。
x = x.reshape((-1, -1))
ValueError: can only specify one unknown dimension
答案 1 :(得分:11)
这意味着,推断了您通过-1
的维度的大小。因此,
A.reshape(-1, 28*28)
表示“重塑A
,以便其第二个维度的大小为28 * 28,并计算第一个维度的正确大小”。