在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.. 12
这意味着,-1
正在推断您传递的维度的大小.从而,
A.reshape(-1, 28*28)
意味着,"重塑A
以使其第二维尺寸为28*28并计算第一维的正确尺寸".
请参阅重塑文档.
在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
正在推断您传递的维度的大小.从而,
A.reshape(-1, 28*28)
意味着,"重塑A
以使其第二维尺寸为28*28并计算第一维的正确尺寸".
请参阅重塑文档.