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))
答案 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)
,只要值有意义,它就会尝试灵活。