<分区>
I have a numpy array (A) of shape = (100000, 28, 28)
I reshape it using A.reshape(-1, 28x28)
这在机器学习管道中非常常见。 这是如何运作的 ?我一直不明白 reshape 中“-1”的含义。
一个确切的问题是 this 但没有确切的解释。有什么答案吗?
<分区>
I have a numpy array (A) of shape = (100000, 28, 28)
I reshape it using A.reshape(-1, 28x28)
这在机器学习管道中非常常见。 这是如何运作的 ?我一直不明白 reshape 中“-1”的含义。
一个确切的问题是 this 但没有确切的解释。有什么答案吗?
最佳答案
在 numpy 中,创建一个 100X100 项的矩阵是这样的:
import numpy as np
x = np.ndarray((100, 100))
x.shape # outputs: (100, 100)
numpy 在内部将所有这 10000 个项目存储在一个 10000 个项目的数组中,而不管这个对象的形状如何,这允许我们将这个数组的形状更改为任何维度只要数组中的项目数量不变
例如,将我们的对象 reshape 为 10X1000 是可以的,因为我们保留了 10000 个项目:
x = x.reshape(10, 1000)
reshape 为 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 将引发异常,因为它不知道我们的意思,因为有不止一种方法可以 reshape 数组。
x = x.reshape(-1, -1)
ValueError: can only specify one unknown dimension
关于python - numpy reshape 中的 -1 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776579/