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不存在这种问题

以上

希望对大家有所帮助

原文地址:https://www.cnblogs.com/lavender-pansy/p/13728682.html