如何将ctypes.POINTER(ctypes.c_float)的指定片段转换为numpy.array?
解决ctypes.POINTER(c_float)切片转换为numpy数组的问题
可以直接通过指针偏移的方式实现,具体操作如下:
- 确定起始指针位置:ctypes指针支持加法运算,偏移量对应目标起始元素的0-based索引(若要取第10至20个元素,对应起始索引为9,共10个元素),指针加法会自动按
c_float的字节大小偏移地址。 - 转换为numpy数组:将偏移后的指针传入
numpy.ctypeslib.as_array,指定目标形状即可。
示例代码:
import ctypes import numpy as np # 假设已存在指向100个float数据的指针float_pointer float_pointer = ctypes.POINTER(ctypes.c_float)() # 提取第10到20个元素(对应0-based索引9到19,共10个) start_ptr = float_pointer + 9 float_slice = np.ctypeslib.as_array(start_ptr, shape=(10,)).copy()
补充说明
- 若不需要独立的numpy数组(仅需内存视图),可以去掉
.copy(),此时数组会直接映射原内存空间,原内存数据变化会同步影响该数组。
内容的提问来源于stack exchange,提问作者Michael Liu CN
相关产品推荐
相关产品推荐

