You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从Numpy切片视图中找回原始数组?

从numpy切片视图恢复原始数组的方法
  • 直接获取原始数组:利用base属性
    numpy的视图数组(比如切片得到的b)会通过base属性指向它所依赖的原始数组。对于大多数简单切片场景,b.base就是你要找的原始数组a:

    import numpy as np
    a = np.linspace(0,5,6)
    b = a[1:5]
    
    print(b.base is a)  # 输出 True
    print(b.base.shape == a.shape and (b.base == a).all())  # 输出 True
    

    多维切片的情况同样适用:

    a = np.arange(12).reshape(3,4)
    b = a[1:, 1:3]
    print(b.base is a)  # 输出 True
    
  • 复杂视图场景的处理
    如果视图经过了转置、变形(未触发复制的情况)等操作,base依然会指向最原始的数组:

    a = np.arange(12).reshape(3,4)
    b = a.T  # 转置是视图
    print(b.base is a)  # 输出 True
    
    c = b.reshape(12,)  # reshape未复制数据,仍是视图
    print(c.base is a)  # 输出 True
    

    若存在多层视图嵌套,可以递归检查base属性,直到base不为None,即可找到原始数组。

  • 无法恢复的情况
    如果视图被显式复制(比如调用b = a[1:5].copy()),或者某些操作触发了numpy自动复制数据(比如非连续切片的部分场景),此时数组的base会是None,说明这是一个独立的新数组,无法从它恢复原始数组a。

内容的提问来源于stack exchange,提问作者Joce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:12:45