我仍在使用ctypes在我的c代码的python接口上编写.今天我用python版本替换了我的文件读取功能,这是由其他人使用NumPy编写的.使用byref(p_data)调用'old'c版本,而p_data = PFloat()(见下文).main函数采用p_data.
旧文件阅读:
p_data=POINTER(c_float)
foo.read(filename,byref(p_data))
result=foo.pymain(p_data)
Run Code Online (Sandbox Code Playgroud)
另一方面,python文件读取函数返回NumPy数组.我现在的问题是:
如何将NumPy数组转换为POINTER(c_float)?
我用谷歌搜索,但只发现相反的方式:C数组通过ctypes访问为NumPy数组和我不理解的东西:C类型外部函数接口(numpy.ctypeslib)
[update] 更正了示例代码中的错误
我刚刚开始使用 C,正在尝试为我的 python 制作一个后端。目前,我有一个繁琐的系统,从 python 编写巨大的输入文件(至少 10^6 个浮点数),然后初始化 C(它还必须加载大量其他数据),运行 C 直到终止,接收其输出只需使用新的输入数组再次重新初始化它。
我不确定环顾四周在概念上是否可行,但我希望能够将 C 定向到 numpy 数组的内存地址,并像使用 C 生成的数组一样使用它。目的是让 python 初始化 C,构建其第一个数组,运行 C 代码,直到准备好下一个数组,然后由 python 生成该数组。
这是我编写的一些虚拟代码,用于尝试让 C 读取 numpy 数组。目前 C 只是有一个分段错误,我不确定是否是因为我不擅长 C,它不喜欢读取 numpy 数组或两者兼而有之。
前端.py
array_interface 来自这里。
#! /usr/bin/python
import numpy as np
import subprocess as sp
ray = np.array([x*3.14 for x in range(10)])
addr = ray.__array_interface__['data'][0]
pro = sp.Popen(['./back', hex(addr)])
print pro.communicate()[0]
print ray[:5]
quit()
Run Code Online (Sandbox Code Playgroud)
后退c
#include <stdio.h>
#include <stdlib.h>
int main(char *argv[])
{
float *addr; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,必须在Python和C++之间处理图像。为了将图像从 C++ 发送到 Python,我在图像的第一个像素上发送一个指针(作为库Mat中的对象OpenCV),在带有两个 for 循环的 Python 中,我使用该指针创建一个 2D numpy 数组。
但我没有成功地以另一种方式做同样的事情:获取 numpy 2D 数组(图像)的第一个像素的内存地址并将其传递给 C++。
假设 x 是我的图像(2D numpy 数组),我尝试了如下解决方案:
x.__array_interface__['data'][0]但这给出了一个整数,而不是地址x.data每次我调用它时都会给出不同的值,因为它给我的是临时缓冲区的地址,而不是图像本身预先感谢您的任何建议/帮助。