通常,當 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
提交
取消