1. 程式人生 > >numpy.ravel()和numpy.flatten()的區別

numpy.ravel()和numpy.flatten()的區別

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