numpy reshape中的-1是什么意思?

Anu*_*pta 8 python numpy machine-learning

 I have a numpy array (A) of shape = (100000, 28, 28)
 I reshape it using A.reshape(-1, 28x28)
Run Code Online (Sandbox Code Playgroud)

这在机器学习管道中非常常见.这是如何运作的 ?我从来没有理解重塑中"-1"的含义.

确切的问题是这个 但没有可靠的解释.有什么答案吗?

Shm*_*ikA 15

在numpy中,创建一个100X100项目的矩阵是这样的:

import numpy as np
x = np.ndarray((100, 100))
x.shape  # outputs: (100, 100)
Run Code Online (Sandbox Code Playgroud)

numpy内部将所有10000个项目存储在10000个项目的数组中,无论此对象的形状如何,这允许我们将此数组的形状更改为任何维度,只要阵列上的项目数不变

例如,将我们的对象重塑为10X1000是正常的,因为我们保留了10000个项目:

x = x.reshape((10, 1000))
Run Code Online (Sandbox Code Playgroud)

重塑到10X2000不会工作,因为我们没有足够的项目列表

x.reshape((10, 2000))
ValueError: total size of new array must be unchanged
Run Code Online (Sandbox Code Playgroud)

所以回到-1问题,它的作用是未知维度的表示法,意思是:让numpy用正确的值填充缺失的维度,这样我的数组就保持相同数量的项目.

所以这:

x = x.reshape((10, 1000))
Run Code Online (Sandbox Code Playgroud)

相当于:

x = x.reshape((10, -1)) 
Run Code Online (Sandbox Code Playgroud)

内部numpy所做的只是计算10000 / 10以获得缺失的维度.

-1 甚至可以在数组的开头或中间.

以上两个例子相当于:

x = x.reshape((-1, 1000)) 
Run Code Online (Sandbox Code Playgroud)

如果我们将尝试将两个维度标记为未知,那么numpy将引发异常,因为它无法知道我们的含义,因为有多种方法可以重新整形数组.

x = x.reshape((-1, -1))
ValueError: can only specify one unknown dimension
Run Code Online (Sandbox Code Playgroud)


Max*_*ers 12

这意味着,-1正在推断您传递的维度的大小.从而,

A.reshape(-1, 28*28)
Run Code Online (Sandbox Code Playgroud)

意味着,"重塑A以使其第二维尺寸为28*28并计算第一维的正确尺寸".

请参阅重塑文档.

  • 我爱你!非常感谢 (3认同)