能否从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
相关产品推荐
相关产品推荐

