关于重塑numpy数组

时间:2018-02-01 08:08:54

标签: numpy multidimensional-array reshape

trainX.size == 43120000
trainX = trainX.reshape([-1, 28, 28, 1])

(1)重塑是否接受列表作为段而不是元组?

(2)以下两个陈述是否相同?

trainX = trainX.reshape([-1, 28, 28, 1])
trainX = trainX.reshape((55000, 28, 28, 1))

2 个答案:

答案 0 :(得分:0)

来自numpy文档:

  

newshape:int或int of int

     

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

所以是的,-1对于一个维度是好的,你的两个陈述是等价的。关于元组要求,

>>> import numpy as np
>>> a = np.arange(9)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a.reshape([3,3])
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> 

显然,列表也很好。

答案 1 :(得分:0)

尝试各种变体:

In [1]: np.arange(12).reshape(3,4)
Out[1]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [2]: np.arange(12).reshape([3,4])
Out[2]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [3]: np.arange(12).reshape((3,4))
Out[3]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

使用reshape方法,形状可以是参数,元组或列表。在reshape函数中必须是列表或元组,以将它们与第一个数组参数分开

In [4]: np.reshape(np.arange(12), (3,4))
Out[4]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

是的,可以使用一个-1。重塑的总大小是固定的,因此可以从其他值中推导出一个值。

In [5]: np.arange(12).reshape(-1,4)
Out[5]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

方法文档有这样的说明:

  

与自由函数numpy.reshape不同,ndarray上的此方法允许   要作为单独参数传递的shape参数的元素。   例如,a.reshape(10, 11)相当于   a.reshape((10, 11))

它是内置函数,但签名看起来像x.reshape(*shape),只要值有意义,它就会尝试灵活。