我对Python中的C和ctype很陌生。
我需要将一个C指针转换为一个双重数组,并将其转换为Python数组。
我的出发点如下:
import ctypes
import numpy as np
arrayPy = np.array([[0, 1, 2], [3, 4, 5]])
out_c = arrayPy.ctypes.data_as(ctypes.POINTER(ctypes.c_double))
请问如何有效地将"out_c“对象转换为Python数组?
发布于 2021-11-26 17:49:34
起点是不正确的,因为arrayPy
是一个整数数组。将dtype
设置为生成一个双倍数组:
import ctypes
import numpy as np
arrayPy = np.array([[0, 1, 2], [3, 4, 5]], dtype=ctypes.c_double)
out_c = arrayPy.ctypes.data_as(ctypes.POINTER(ctypes.c_double))
print(out_c, out_c[:arrayPy.size])
输出是指向double的C指针。对指针进行切片将显示数据,但您需要知道数据的大小,以避免在数据结束后进行迭代:
<__main__.LP_c_double object at 0x000001A2B758E3C0> [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
--我需要将一个C指针转换为一个双重数组,然后转换为Python数组。
若要将该指针转换回numpy数组,如果您知道它的形状,可以使用以下内容:
a = np.ctypeslib.as_array(out_c, shape=arrayPy.shape)
print(a)
输出:
[[0. 1. 2.]
[3. 4. 5.]]
https://stackoverflow.com/questions/70110337
复制相似问题