numpy:手册
一、ravel、flatten、squeeze、reshape
- ravel(): 不会产生原来数据的副本
- flatten():返回源数据副本
- squeeze():只能对维度为1的维度降维
- reshape(-1):可以拉平多维数组
二、把多维的数组降为1维
import numpy as np
data = np.linspace(1,12,12).reshape(3,4)
print(data)
print('-'*20)
print(data.ravel())
print('-'*20)
print(data.flatten())
print('-'*20)
print(data.squeeze())
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
--------------------
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
--------------------
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
--------------------
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
三、可以看到.ravel() .flatten()都将多维数组降至一维,而squeezeqz只能对shape值为1的维度降维,在这种情况下无法降维。
import numpy as np
data = np.linspace(1,12,12).reshape(12,1)
print(data)
print('-'*20)
print(data.squeeze())
print('-'*20)
data = np.linspace(1,12,12).reshape(1,12)
print(data)
print('-'*20)
print(data.squeeze())
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ 5.]
[ 6.]
[ 7.]
[ 8.]
[ 9.]
[10.]
[11.]
[12.]]
--------------------
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
--------------------
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]]
--------------------
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
三、产生源数据的副本,对数据更改时会影响原来的数组;
import numpy as np
data = np.linspace(1,12,12).reshape(3,4)
print(data)
print('-'*20)
data.ravel()[3]=100
print(data)
print()
print('-'*20)
data = np.linspace(1,12,12).reshape(3,4)
print(data)
print('-'*20)
data.flatten()[3]=100
print(data)
print()
print('-'*20)
data = np.linspace(1,12,12).reshape(1,12)
print(data)
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
--------------------
[[ 1. 2. 3. 100.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
--------------------
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
--------------------
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
--------------------
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]]
--------------------
[[ 1. 2. 3. 100. 5. 6. 7. 8. 9. 10. 11. 12.]]