-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!)。