numpy ravel、flatten、squeeze、reshape

本文详细介绍了NumPy中数组操作的基础方法,包括ravel、flatten、squeeze和reshape等函数的功能及使用场景。通过实例对比了这些函数在多维数组降维处理上的不同表现,并展示了如何利用它们进行高效的数组转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_yuki_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值