我在代码中发现了一种奇怪的情况,该问题显示在下面的代码中
import numpy as np
dt = dict(names = ['n1','n2'], formats = ['a8','int'])
reca = np.recarray((10,), dtype = dt)
reca['n1'] = ['a','b','c','d','e','f','g','e','f','g']
reca['n2'] = range(10)
sreca = reca[::2]
print sreca[0] in reca
sreca[0]['n2'] = 12
print sreca[0] in reca
ireca = reca[[1,3,5,7]]
print ireca[0] in reca
ireca[0]['n2'] = 7
print ireca[0] in reca
输出为:
True
True
True
False
据我了解,除非我直接为其分配新值,否则应保留sreca
或ireca
的引用reca
,但ireca
在分配后会丢失其引用。我不知道这是否可以预期。
有人可以建议我如何避免这种情况吗?
顺便说一句,我发现对代码reca['n1'] = ['a']*10
进行一些小的更改(例如)会使True
本示例中的我全部受益,这的确使我感到困惑。
在中使用花式索引recarray
将把数据复制到新数组中。相反,您可以执行以下操作:
ireca = [reca[i] for i in [1,3,5,7]]
因为仅获取recarray的一项即可保留引用。您可以使用flags
参数检查何时创建了新数组:
print(reca[0].flags)
表演 OWNDATA : False
print(reca[[0,1]].flags)
表演 OWNDATA : True
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句