把一個矩陣行優先展成一個向量,numpy.ravel() vs numpy.flatten()區別
阿新 • • 發佈:2019-01-03
首先宣告兩者所要實現的功能是一致的(將多維陣列降位一維),兩者的區別在於返回拷貝(copy)還是返回檢視(view),numpy.flatten()返回一份拷貝,對拷貝所做的修改不會影響原始矩陣,而numpy.ravel()返回的是檢視,會影響原始矩陣。
兩者區別
x = np.array([[1, 2], [3, 4]])
print(x.flatten()[1] = 100)
array([[1, 2],
[3, 4]]) # flatten:返回的是拷貝,不會對資料進行修改
print(x.ravel()[1] = 100) #ravel()則回對資料進行就該
array([[ 1, 100],
[ 3, 4]] )
二者共性:
驗證兩者的功能
x = np.array([[1, 2], [3, 4]])
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])