numpy.ravel() 和numpy.flatten()用法与区别
功能:
两者功能一致,都是将多维数组降为一维数组。
>>> 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])
区别:
numpy.flatten() :返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵
numpy.ravel(): 返回的是视图(view),对视图修改会影响原始矩阵(类似于C++中的引用)
>>> 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]])