将多维numpy数组转换为ctypes数组的最有效方法

2024-04-26 12:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我正在使用python中的ctypes模块来运行python中的一些图像处理C代码,目的是优化我的代码,并减少执行时间。在

在 为此,我将一个图像读入一个numpy数组,然后使用一个内核对该图像应用2D卷积,生成一个过滤后的图像。为了节省一些执行时间,我希望在C中实现相同的目标。在

所以,问题的第一部分是将numpy图像数组转换成ctype数组,这样我就可以用C语言执行卷积了。 下面是我的C代码,现在什么也不做,但我需要它来访问函数定义:

#import <math.h>

void convolution(int *array,int *kernel, int array_height, int array_width,
                 int kernel_height, int kernel_width) {
    int i=0;

下面是我的python代码,它为这个C函数添加了一个包装函数:

^{pr2}$

尽管这段代码工作得很好,但我想知道的是,有没有更有效的方法来执行从numpy数组或list到ctypes数组的转换?因为我在python中使用C扩展来节省执行时间,所以我希望这个时间尽可能少。在

编辑

正如Daniel建议的,我使用了^{},它对1D numpy数组很好,我做了如下工作:

c_array = numpy.ascontiguousarray(array,dtype=numpy.uint32)

但是当我尝试二维数组的类似方法时,它不起作用,我尝试的是:

c_array = numpy.ascontiguousarray(array,dtype=numpy.ndarray)

当我使用这个时,python崩溃了。我做错什么了?在


Tags: 方法函数代码图像numpy时间数组ctypes