为什么 Python 告诉我记录的内存视图是只读的?
>>> x = np.zeros(1, dtype='d,d,i')
>>> x
array([(0., 0., 0)], dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
>>> memoryview(x).readonly
False
>>> memoryview(x[0]).readonly
True
Run Code Online (Sandbox Code Playgroud)
显然,x[0]不是只读的,因为
>>> x[0][0] += 1
>>> x[0]
(1., 0., 0)
Run Code Online (Sandbox Code Playgroud)
内存视图对于普通数组没有问题:
>>> y = np.zeros((3, 4))
>>> memoryview(y).readonly
False
>>> memoryview(y[0]).readonly
False
Run Code Online (Sandbox Code Playgroud)
同样,不推荐使用的人__array_info__知道它x[0]是读写的:
>>> x.__array_interface__['data'] # returns tuple (address, read-only)
(105553143159680, False)
>>> x[0].array_interface__['data']
(105553143159680, False)
Run Code Online (Sandbox Code Playgroud)
我的实际问题是 C 代码。幸运的是,我的所有问题也可以用纯 Python 显示。
我正在尝试用 C 代码读取和写入 numpy 记录,我只需要数据的地址。__array_interface__我可以使用它相应的 C-side找到数据的地址 …