numpy中的ravel(),faltten(),squeeze()的区别与使用
首先,这三个方法都可以将多维数组变为一维数组
区别:
- ravel():如果没有必要,不会产生源数据的副本
- flatten():返回源数据的副本
- squeeze():只能对维数为一的维度降维
另外,reshape(-1)也有拉平数组的功效
代码演示如下:
import numpy as np arr = np.arange(12).reshape(3,4) print('原数组') print(arr) print('---') print('经过ravel变换的数组') temp = arr.ravel() print(temp) temp[3] = 1 print('---') print('原数组') print(arr) print('==============================') arr = np.arange(12).reshape(3,4) print('原数组') print(arr) print('---') temp = arr.flatten() print('经过flatten变换的数组') print(temp) print('---') print('原数组') temp[3] = 1 print(arr) print('==============================') arr = np.arange(12).reshape(3,4) print('原数组') print(arr) print('---') print('经过squeeze变换的数组') print(arr.squeeze()) print('---') print('重新定义维度为一的数组') arr = np.arange(12).reshape(12,1) print('---') print('经过squeeze变换的一维数组') print(arr.squeeze())
结果如下图:
可以看到,经过ravel变换后,对新对象进行操作会影响到原数组,而flatten不存在这种问题
以上
希望对大家有所帮助