通常,当 numpy 具有看似重复的功能时,通常最终会导致其中一个或另一个具有某种独特的目的。我试图弄清楚是否有任何情况 flatten()应该使用而不是reshape(-1)
1 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
flatten 返回数组的副本。reshape如果可能,将返回视图。因此,例如,如果y = x.reshape(-1)是一个视图,那么修改y也会修改x:
In [149]: x = np.arange(3)
In [150]: y = x.reshape(-1)
In [151]: y[0] = 99
In [152]: x
Out[152]: array([99, 1, 2])
但既然y = x.flatten()是副本,修改y永远不会修改x:
In [153]: x = np.arange(3)
In [154]: y = x.flatten()
In [155]: y[0] = 99
In [156]: x
Out[156]: array([0, 1, 2])
以下是何时reshape返回副本而不是视图的示例:
In [161]: x = np.arange(24).reshape(4,6)[::2, :]
In [163]: y = x.reshape(-1)
In [164]: y[0] = 99
In [165]: x
Out[165]:
array([[ 0, 1, 2, 3, 4, 5],
[12, 13, 14, 15, 16, 17]])
由于x不受对 分配的影响y,我们知道y是 的副本 x,而不是视图。
添加回答
举报
0/150
提交
取消