我的印象是,在 NumPy 中,两个数组可以共享相同的内存。举个例子:
import numpy as np
a=np.arange(27)
b=a.reshape((3,3,3))
a[0]=5000
print (b[0,0,0]) #5000
#Some tests:
a.data is b.data #False
a.data == b.data #True
c=np.arange(27)
c[0]=5000
a.data == c.data #True ( Same data, not same memory storage ), False positive
这么清楚b
没有复印a
;它只是创建了一些新的元数据并将其附加到与a
正在使用。有没有办法检查两个数组是否引用相同的内存缓冲区?
我的第一印象是使用a.data is b.data
,但返回 false。我可以a.data == b.data
它返回 True,但我不认为检查可以确保a
and b
共享相同的内存缓冲区,只是引用的内存块a
以及引用的那个b
具有相同的字节。
您可以使用base https://numpy.org/doc/stable/reference/generated/numpy.ndarray.base.html属性来检查一个数组是否与另一个数组共享内存:
>>> import numpy as np
>>> a = np.arange(27)
>>> b = a.reshape((3,3,3))
>>> b.base is a
True
>>> a.base is b
False
不确定这是否能解决您的问题。基本属性将是None
如果数组拥有自己的内存。请注意,一个数组的基数将是另一个数组,即使它是一个子集:
>>> c = a[2:]
>>> c.base is a
True
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)