这两个函数的功能都是将多维的数组降低为一维,但是区别在于一个是拷贝,一个仅是视图。
np.flatten()返回的是数组的拷贝,对拷贝的修改不会影响到原始的数组;
但是np.ravel()是原数组的视图,对视图的修改会更改了原始的数组的数据。
且我们在多维变成一维的时候,是默认的行优先。
import numpy as np
x=np.array([[1,2,3],[3,4,5]])
xf=x.flatten()
print ("xf:",xf)
xr=x.ravel()
print ("xr:",xr)
xff=x.flatten('f')
print ("xff:",xff)
xrr=x.ravel('f')
print ("xrr:",xrr)
xf[0]=3
print ("xf:",xf)
print ("x:",x)
xr[0]=3
print ("xr:",xr)
print ("x:",x)
结果如下:
('xf:', array([1, 2, 3, 3, 4, 5]))
('xr:', array([1, 2, 3, 3, 4, 5]))
('xff:', array([1, 3, 2, 4, 3, 5]))
('xrr:', array([1, 3, 2, 4, 3, 5]))
('xf:', array([3, 2, 3, 3, 4, 5]))
('x:', array([[1, 2, 3],
[3, 4, 5]]))
('xr:', array([3, 2, 3, 3, 4, 5]))
('x:', array([[3, 2, 3],
[3, 4, 5]]))