我好像有XY问题
this
关于如何判断阵列是否共享相同内存的问题。我检查的方式是错误的,我不知道为什么。
让我们举几个例子
test = np.ones((3,3))
test2 = np.array(test, ndmin = 2, copy = False)
test3 = np.array(test, ndmin = 3, copy = False)
首先,让我们检查他们是否正在使用
.base
test2.base is test
False
test3.base is test
True
看起来是这样的
test3
正在与共享数据
test
但是
test2
不是。事实上
test2.base is None => True
,我认为这意味着它是独立的内存(即副本)。
当我与
.flags
test2.flags['OWNDATA']
True
test3.flags['OWNDATA']
False
看起来又像是
测试3
正在共享数据,并且
测试2
是一个副本。
但如果我和
python
内置
id(...)
id(test)
248896912
id(test2)
248896912
id(test3)
248897352
现在
id
(据说是内存中对象的地址)的
测验
和
测试2
匹配但
测试3
没有,这给人的印象与上述方法完全相反。
当然,这两种印象都是错误的,因为:
test.__array_interface__['data']
(209580688, False)
test2.__array_interface__['data']
(209580688, False)
test3.__array_interface__['data']
(209580688, False)
实际
buffer addresses
全部匹配。的确:
test[0,0] = 2
test, test2, test3
(array([[ 2., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]),
array([[ 2., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]),
array([[[ 2., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]]))
所以如果
ndarray.base
,
ndarray.flags['OWNDATA']
和
id(ndarray)
不要告诉我内存是否共享,什么
是
他们告诉我?