gpt4 book ai didi

python - 如何将 NumPy 数组与 ctypes 一起使用?

转载 作者:太空狗 更新时间:2023-10-29 19:34:58 26 4
gpt4 key购买 nike

我仍在使用 ctypes 为我的 c 代码编写 python 接口(interface)。今天我用 python 版本替换了我的文件读取功能,它是由其他人使用 NumPy 编写的。 “旧”c 版本是使用 byref(p_data)p_data=PFloat() 调用的(见下文)。 main 函数接受 p_data

旧文件阅读:

p_data=POINTER(c_float)
foo.read(filename,byref(p_data))
result=foo.pymain(p_data)

另一方面,python 文件读取函数返回一个 NumPy 数组。我现在的问题是:

如何将 NumPy 数组转换为 POINTER(c_float)

我用谷歌搜索,但只找到了相反的方向:C arrays through ctypes accessed as NumPy arrays和我不明白的事情:C-Types Foreign Function Interface (numpy.ctypeslib)

[更新]更正了示例代码中的一个错误

最佳答案

您的代码看起来有些困惑 -- ctypes.POINTER() 创建一个新的 ctypes 指针 class,而不是 ctypes 实例。无论如何,将 NumPy 数组传递给 ctypes 代码的最简单方法是使用 numpy.ndarrayctypes 属性的 data_as 方法。首先确保基础数据是正确的类型。例如:

import ctypes
import numpy
c_float_p = ctypes.POINTER(ctypes.c_float)
data = numpy.array([[0.1, 0.1], [0.2, 0.2], [0.3, 0.3]])
data = data.astype(numpy.float32)
data_p = data.ctypes.data_as(c_float_p)

关于python - 如何将 NumPy 数组与 ctypes 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3195660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com