numpy.ravel()和numpy.flatten()的區別
阿新 • • 發佈:2018-11-07
首先宣告兩者所要實現的功能是一致的(將多維陣列降位一維),兩者的區別在於返回拷貝(copy)還是返回檢視(view),numpy.flatten()返回一份拷貝,對拷貝所做的修改不會影響(reflects)原始矩陣,而numpy.ravel()返回的是檢視(view,也頗有幾分C/C++引用reference的意味),會影響(reflects)原始矩陣。
1.兩者的功能
>>> x = np.array([[1, 2], [3, 4]])
>>> x
array([[1, 2],
[3, 4]])
>>> x. flatten()
array([1, 2, 3, 4])
>>> x.ravel()
array([1, 2, 3, 4])
兩者預設均是行序優先
>>> x.flatten('F')
array([1, 3, 2, 4])
>>> x.ravel('F')
array([1, 3, 2, 4])
>>> x.reshape(-1)
array([1, 2, 3, 4])
>>> x.T.reshape(-1)
array([1, 3, 2, 4])
2.兩者的區別
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
[3, 4]]) # flatten:返回的是拷貝
>>> x.ravel()[1] = 100
>>> x
array([[ 1, 100],
[ 3, 4]])
本篇文章轉載自:https://blog.csdn.net/lanchunhui/article/details/50354978