可以使用.重塑(-1)将2D数组重新塑造为1D数组。 例如:

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

通常,array[-1]表示最后一个元素。 这里-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))

输出:(1维柱状阵列)

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

or

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

输出:(是一个1维行数组)

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

其他回答

-1代表“未知维度”,可以从另一个维度推断出来。 在这种情况下,如果你这样设置你的矩阵:

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

像这样修改你的矩阵:

b = numpy.reshape(a, -1)

它将调用一些对矩阵a的默认操作,这将返回一个1-d numpy数组/矩阵。

然而,我不认为使用这样的代码是一个好主意。为什么不试试呢:

b = a.reshape(1, -1)

它会给你同样的结果,而且更容易让读者理解:将b设置为a的另一种形状。对于a,我们不知道它应该有多少列(设置为-1!),但我们想要一个一维数组(设置第一个参数为1!)

根据文档:

Newshape: int或int的元组 新形状应与原形状兼容。如果一个 整数,则结果将是该长度的一维数组。一个形状 维度可以是-1。在本例中,该值是从 数组的长度和剩余维度。

"在所有其他维度都已指定的情况下,推断出这个维度"

显式地,这将使-1维度成为原始数组的维度积与新指定的dim的维度积的商。如果不是整数,则返回错误。

例如,对于一个形状数组(2,3,5),以下都是等价的:

a = np.random.rand(2, 3, 5)

np.reshape(a, (-1,  2,  5))
np.reshape(a, ( 3, -1,  5))
np.reshape(a, ( 3,  2, -1))

假设我们有一个三维数组,大小为2 x 10 x 10:

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

现在我们要重塑为5 X 5 X 8:

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

会完成任务的。

注意,一旦你修复了第一个dim = 5和第二个dim = 5,你就不需要确定第三个维度了。为了帮助你的懒惰,Numpy提供了使用-1的选项:

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

会得到一个shape =(5,5,8)的数组。

同样的,

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

会得到一个数组shape = (50,4)

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

转换的最终结果是最终数组中的元素数量与初始数组或数据帧的元素数量相同。

-1对应行或列的未知计数。 我们可以把它看成x(未知)X是用原始数组中的元素数除以-1的有序对的另一个值得到的。

例子:

12个元素与重塑(-1,1)对应的数组x=12/1=12行1列。


12个元素具有重塑(1,-1)对应于一个有1行和x=12/1=12列的数组。