将 numpy 数组转换为 ctypes 数组时出现问题

Problem converting numpy array to ctypes array

我在将 numpy 数组转换为 ctypes 数组时遇到问题。我没有收到任何错误或异常,但 ctypes 数组与原始数组完全不同。

def convarray(x):
    arr = x.ctypes.data_as(ctypes.POINTER(ctypes.c_uint64) )
    print(arr[0], arr[1], arr[2])
    print(x.shape, x.dtype, x)
    ...

打印语句的结果是:

8 399 1099526307842
(958150,) uint64 [ 8 8 8 ... 92 94 96]

如您所见,前三个元素中,只有一个是正确的。

为什么会这样?

我正在使用 Numpy 1.21.0 和 Python 3.9.2

我发现了问题所在:作为 x 传递的数组是通过从二维数组切片得到的,因此其基础数据也是二维的。设置 x = x.copy() 通过创建一个包含一维数据的新数组解决了这个问题。