Numpy的flatten()和ravel()两者区别

numpy 中的 flatten()ravel() 函数都可以将多维数组转换为一维数组,但它们之间存在一些区别:

  1. 返回类型
    • flatten():返回的是数组的一个副本,即一个新的数组对象。
    • ravel():返回的是数组的视图(view),这意味着它不会占用额外的内存,并且对返回的数组的修改可能会影响到原始数组。
  2. 内存使用
    • flatten():由于返回的是副本,所以会占用额外的内存。
    • ravel():返回的是视图,因此不会占用额外的内存。
  3. 连续性
    • flatten():默认情况下,返回的数组总是连续的,即数据在内存中是连续存储的。
    • ravel():默认情况下,如果原始数组是连续的,那么返回的视图也是连续的;如果原始数组不是连续的,那么返回的视图可能不是连续的。
  4. 参数
    • flatten():有一个可选参数 order,可以设置为 'C'(按行)、'F'(按列)或者 'A'(原顺序)等,来指定返回的数组的顺序。
    • ravel():同样接受 order 参数,并且还可以接受 order='K',它表示保持原始数组的元素顺序。
  5. 性能
    • flatten():由于创建了一个副本,所以可能会比 ravel() 慢。
    • ravel():通常比 flatten() 快,因为它返回的是视图。
      以下是一个简单的示例来说明这两个函数的使用:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 使用 flatten()
flattened_arr = arr.flatten()
print(flattened_arr)  # 输出: [1 2 3 4 5 6]
# 使用 ravel()
raveled_arr = arr.ravel()
print(raveled_arr)    # 输出: [1 2 3 4 5 6]
# 修改 raveled_arr 中的一个元素,原始数组也会被修改
raveled_arr[0] = 99
print(arr)            # 输出: [[99  2  3]
                       #        [ 4  5  6]]

在这个例子中,修改 raveled_arr 会影响原始数组 arr,但修改 flattened_arr 不会。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

能力工场小马哥

如果对您有帮助, 请打赏支持~

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

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

打赏作者

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

抵扣说明:

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

余额充值