-1是什么意思在numpy重塑?

使用带参数-1的重塑函数可以将一个numpymatrix重新整形成一个向量。 但我不知道这里是什么意思。

例如:

a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) b = numpy.reshape(a, -1) 

b的结果是: matrix([[1, 2, 3, 4, 5, 6, 7, 8]])

有人知道什么-1意味着在这里? 它似乎python分配-1几个含义,如: array[-1]意味着最后一个元素。 你能给一个解释吗?

满足提供新形状的标准是“新形状应与原始形状兼容”

numpy允许我们给一个新的形状参数为-1(例如:(2,-1)或(-1,3)而不是(-1,-1))。 它只是意味着它是一个未知的维度,我们希望numpy来弄明白。 而numpy会通过查看“数组长度和剩余维数”来确定它满足上述标准

现在看例子。

 z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) z.shape (3, 4) 

现在试图用(-1)重塑。 结果新形状是(12),并与原始形状(3,4)兼容

 z.reshape(-1) array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) 

现在试图用(-1,1)重塑。 我们提供了列为1,但行为未知。 因此,我们得到结果新的形状(12,1)。与原始形状(3,4)

 z.reshape(-1,1) array([[ 1], [ 2], [ 3], [ 4], [ 5], [ 6], [ 7], [ 8], [ 9], [10], [11], [12]]) 

(-1,2)的新形状。 行未知,列2.我们得到结果新的形状为(6,2)

 z.reshape(-1, 2) array([[ 1, 2], [ 3, 4], [ 5, 6], [ 7, 8], [ 9, 10], [11, 12]]) 

现在试图保持列未知。 (1,-1)的新形状。 即行是1,列未知。 (1,12)

 z.reshape(1,-1) array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]) 

新形状(2,-1)。 第2行,列未知。 我们得到结果新的形状为(2,6)

 z.reshape(2, -1) array([[ 1, 2, 3, 4, 5, 6], [ 7, 8, 9, 10, 11, 12]]) 

(3,-1)的新形状。 第3行,列未知。 我们得到结果新形状(3,4)

 z.reshape(3, -1) array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) 

最后,如果我们试图提供两个维度作为未知,即新的形状(-1,-1)。 它会抛出一个错误

 z.reshape(-1, -1) ValueError: can only specify one unknown dimension 

根据the documentation

newshape:int或int的元组

新的形状应该与原来的形状兼容。 如果是整数,那么结果将是该长度的一维数组。 一个形状尺寸可以是-1。 在这种情况下,该值是从数组的长度和剩余维度中推断出来的。

numpy.reshape(a,newshape,order {})查看下面的链接了解更多信息。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html

对于你提到的下面的例子,输出解释了合成向量为单行。( – 1)表示行数为1.如果

 a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) b = numpy.reshape(a, -1) 

输出:

matrix([[1,2,3,4,5,6,7,8]])

这可以用另一个例子更精确地解释:

 b = np.arange(10).reshape((-1,1)) 

输出:(是一个一维柱状arrays)

arrays([[0],

  [1], [2], [3], [4], [5], [6], [7], [8], [9]]) 

b = np.arange(10).reshape((1,-1))

输出:(是一维行数组)

数组([[0,1,2,3,4,5,6,7,8,9]])

用于重新排列数组。

假设我们有一个尺寸为2 x 10 x 10的三维数组

 r = numpy.random.rand(2, 10, 10) 

现在我们要重塑成5×5×8

  numpy.reshape(r, shape=(5,5,8)) 

会做的。 一旦你修复第一个昏暗= 5和第二昏暗= 5,你不需要确定第三维。 协助你的懒惰,python给-1。

  numpy.reshape(r, shape=(5,5,-1)) 

像明智一样

  numpy.reshape(r, shape=(50,-1)) 

会给你一个shape =(50,4)的数组,

你可以阅读更多在http://anie.me/numpy-reshape-transpose-theano-dimshuffle/

这很容易理解。 “-1”代表可以从另一个维度传递的“未知维度”。 在这种情况下,如果你设置你的matrix是这样的:

 a = numpy.matrix([[1, 2, 3, 4], [5, 6, 7, 8]]) 

像这样修改你的matrix:

 b = numpy.reshape(a, -1) 

它会调用一些deafult操作matrixa,这将返回一个一维numpyarrays/ martrix。

但是,我不认为这样使用代码是一个好主意。 为什么不尝试:

 b = a.reshape(1,-1) 

它会给你同样的结果,读者更清楚地理解:将b设置为另一个形状。 对于a,我们不应该有多less列(将其设置为-1!),但是我们需要一维数组(将第一个参数设置为1!)。