What does -1 mean in numpy reshape?
numpy矩阵可以使用参数为-1的reform函数重新整形为向量。但我不知道-1在这里意味着什么。
例如:
1 2 | a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) b = numpy.reshape(a, -1) |
有人知道-1的意思吗?似乎python给-1赋予了一些含义,例如:
满足提供新形状的标准是"新形状应与原始形状兼容"。
numpy允许我们将一个新的形状参数指定为-1(例如:(2,-1)或(-1,3),但不是(-1,-1))。它只是意味着它是一个未知的维度,我们希望numpy能找出它。numpy将通过查看"数组的长度和剩余尺寸"并确保它满足上述标准来确定这一点。
现在看看这个例子。
1 2 3 4 5 | z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) z.shape (3, 4) |
。
现在尝试用(-1)重新整形。结果新形状为(12,图1),与原形状(3,4)相匹配。
1 2 | z.reshape(-1) array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) |
现在尝试用(-1,1)重新整形。我们已将列提供为1,但行提供为未知。所以我们得到的结果是新形状为(12,1)。再次与原始形状(3,4)兼容。
1 2 3 4 5 6 7 8 9 10 11 12 13 | z.reshape(-1,1) array([[ 1], [ 2], [ 3], [ 4], [ 5], [ 6], [ 7], [ 8], [ 9], [10], [11], [12]]) |
。
新形状为(-1,2)。行未知,列2。我们得到结果新形状为(6,2)
1 2 3 4 5 6 7 | z.reshape(-1, 2) array([[ 1, 2], [ 3, 4], [ 5, 6], [ 7, 8], [ 9, 10], [11, 12]]) |
现在尝试将列保持为未知。新形状为(1,-1)。即,行为1,列未知。我们得到结果新形状为(1,12)
1 2 | z.reshape(1,-1) array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]) |
。
新形状(2,-1)。第2行,未知列。我们得到结果新形状为(2,6)
1 2 3 | z.reshape(2, -1) array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12]]) |
号
新形状为(3,-1)。第3行,未知列。我们得到结果新形状为(3,4)
1 2 3 4 | z.reshape(3, -1) array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) |
号
最后,如果我们试图提供未知的两个维度,即新的形状为(-1,-1)。它会抛出一个错误
1 2 | z.reshape(-1, -1) ValueError: can only specify one unknown dimension |
号
用于调整数组的形状。
假设我们有一个尺寸为2 x 10 x 10的三维数组:
1 | r = numpy.random.rand(2, 10, 10) |
号
现在我们要将形状改为5 x 5 x 8:
1 | numpy.reshape(r, shape=(5, 5, 8)) |
号
会完成任务的。
请注意,一旦修复了第一个dim=5和第二个dim=5,就不需要确定第三个维度。为了帮助您的懒惰,python提供了-1选项:
1 | numpy.reshape(r, shape=(5, 5, -1)) |
号
会给你一个形状数组=(5,5,8)。
同样地,
1 | numpy.reshape(r, shape=(50, -1)) |
号
会给你一个形状数组=(50,4)
您可以在http://anie.me/numpy-remaze-transmose-theano-dimshuffle上阅读更多内容。/
根据
newshape : int or tuple of ints
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.
号
numpy.重塑(a,newshape,order)有关详细信息,请查看下面的链接。https://docs.scipy.org/doc/numpy/reference/generated/numpy.reforme.html网站
对于下面的示例,您提到的输出将结果向量解释为单行。(-1)指示行数为1。如果
1 2 | a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) b = numpy.reshape(a, -1) |
输出:
矩阵([[1,2,3,4,5,6,7,8]])
这可以用另一个例子更精确地解释:
1 | b = np.arange(10).reshape((-1,1)) |
号
输出:(是一维柱状数组)
数组([[0],
1 2 3 4 5 6 7 8 9 | [1], [2], [3], [4], [5], [6], [7], [8], [9]]) |
b=np.arange(10).整形((1,-1))
输出:(是一维行数组)
数组([[0,1,2,3,4,5,6,7,8,9]])
这很容易理解。"-1"代表"未知维度",可以从另一个维度推断。在这种情况下,如果按如下方式设置矩阵:
1 | a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) |
。
像这样修改矩阵:
1 | b = numpy.reshape(a, -1) |
它将对矩阵A调用一些死机操作,这将返回一个一维numpy数组/martrix。
但是,我不认为使用这样的代码是个好主意。为什么不尝试:
1 | b = a.reshape(1,-1) |
。
它会给你同样的结果,读者更清楚地理解:将B设置为A的另一个形状。对于A,我们不知道它应该有多少列(设置为-1!),但我们需要一维数组(将第一个参数设置为1!).
长话短说:您设置了一些维度,让numpy设置其余的维度。
1 2 3 | (userDim1, userDim2, ..., -1) -->> (userDim1, userDim1, ..., TOTAL_DIMENSION - (userDim1 + userDim2 + ...)) |
号