numpy reshape 中的 -1 是啥意思? [复制]
Posted
技术标签:
【中文标题】numpy reshape 中的 -1 是啥意思? [复制]【英文标题】:What does -1 in numpy reshape mean? [duplicate]numpy reshape 中的 -1 是什么意思? [复制] 【发布时间】:2017-06-06 04:56:01 【问题描述】: I have a numpy array (A) of shape = (100000, 28, 28)
I reshape it using A.reshape(-1, 28x28)
这在机器学习管道中非常常见。 这是如何运作的 ?我从来没有理解重塑中'-1'的含义。
一个确切的问题是this 但没有可靠的解释。请问有什么答案吗?
【问题讨论】:
查看文档:docs.scipy.org/doc/numpy/reference/generated/… -The new shape should be compatible with the original shape. If an integer, then the result will be a 1-D array of that length. One shape dimension can be -1. In this case, the value is inferred from the length of the array and remaining dimensions.
在您的示例中,生成的数组将具有形状 (100000, 784)。它是第一维的简写,因为只有一个值是正确的。
【参考方案1】:
在 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
【讨论】:
@MaxPowers :我可以说:您允许不指定重构数组的 1 个维度。您将 -1 用于“未指定”维度。在运行时,这是从重构数组的旧大小和其他维度推断出来的? numpy 只是为你计算它,而不是你明确地写它。不涉及运行时。是的,你说得对,它是从旧大小推断出来的 -reshape()
无法更改数组项的数量【参考方案2】:
这意味着正在推断您传递-1
的维度的大小。因此,
A.reshape(-1, 28*28)
意思是,“重塑A
,使其第二个维度的大小为28*28,并计算出第一个维度的正确大小”。
See documentation of reshape.
【讨论】:
以上是关于numpy reshape 中的 -1 是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
数组在 numpy/sklearn 数据集中是啥意思? Python
matlab中reshape函数中把A中元素进行重塑成m×n×p×…的矩阵是啥意思
python 来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html#numpy.reshape的numpy