相关疑难解决方法(0)

如何使用带有ctypes的NumPy数组?

我仍在使用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] 更正了示例代码中的错误

python ctypes numpy

9
推荐指数
2
解决办法
2万
查看次数

C 中的 Numpy 数组

我刚刚开始使用 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)

c python ctypes numpy backend

5
推荐指数
1
解决办法
5974
查看次数

从 numpy 数组获取指针以将图像发送到 C++

我正在开发一个项目,必须在PythonC++之间处理图像。为了将图像从 C++ 发送到 Python,我在图像的第一个像素上发送一个指针(作为库Mat中的对象OpenCV),在带有两个 for 循环的 Python 中,我使用该指针创建一个 2D numpy 数组。

但我没有成功地以另一种方式做同样的事情:获取 numpy 2D 数组(图像)的第一个像素的内存地址并将其传递给 C++。

假设 x 是我的图像(2D numpy 数组),我尝试了如下解决方案:

  • x.__array_interface__['data'][0]但这给出了一个整数,而不是地址
  • x.data每次我调用它时都会给出不同的值,因为它给我的是临时缓冲区的地址,而不是图像本身

预先感谢您的任何建议/帮助。

c++ python arrays pointers numpy

5
推荐指数
1
解决办法
4642
查看次数

标签 统计

numpy ×3

python ×3

ctypes ×2

arrays ×1

backend ×1

c ×1

c++ ×1

pointers ×1