You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C指针指向的双精度浮点数数组高效转换为Python numpy数组

C双精度浮点数指针转Numpy数组的高效方案

你可以使用numpy原生的np.ctypeslib.as_array方法完成零拷贝转换,该方法专门适配ctypes类型的指针转numpy数组,不需要额外写内存操作逻辑,性能最优。

完整运行示例

import ctypes
import numpy as np

# 原有基础代码(补充显式指定dtype避免类型不匹配问题)
arrayPy = np.array([[0, 1, 2], [3, 4, 5]], dtype=np.float64)
out_c = arrayPy.ctypes.data_as(ctypes.POINTER(ctypes.c_double))

# 转换回numpy数组,shape根据实际数组维度传入即可
restored_array = np.ctypeslib.as_array(out_c, shape=(2, 3))

注意事项

  • 转换是零拷贝的,得到的numpy数组和原C指针共享同一块内存,修改任意一方的数据都会同步到另一方。
  • 必须显式传入shape参数:C指针仅记录内存起始地址,不包含数组的长度、维度信息,需要你根据实际业务场景传入正确的数组形状,一维数组可以直接传元素总长度,比如shape=(6,)。
  • 要注意内存生命周期:如果C侧手动释放了指针指向的内存,转换得到的numpy数组会变成野指针访问,出现崩溃或者乱码数据,需要保证转换后数组的访问周期在C内存的有效周期内。
  • 原示例中的numpy数组如果不显式指定dtype=np.float64,默认会创建int类型数组,直接转c_double指针会出现数据解析错误,需要保证两侧数据类型完全对应。

内容的提问来源于stack exchange,提问作者Evgenii Danilov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:27:01