1. 程式人生 > >把一個矩陣行優先展成一個向量,numpy.ravel() vs numpy.flatten()區別

把一個矩陣行優先展成一個向量,numpy.ravel() vs numpy.flatten()區別

首先宣告兩者所要實現的功能是一致的(將多維陣列降位一維),兩者的區別在於返回拷貝(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])