Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ctypes、pass和return numpy数组在Python中获得类似C的速度_Python_C_Arrays_Ctypes - Fatal编程技术网

使用ctypes、pass和return numpy数组在Python中获得类似C的速度

使用ctypes、pass和return numpy数组在Python中获得类似C的速度,python,c,arrays,ctypes,Python,C,Arrays,Ctypes,我有一个与速度相关的任务,就我所见,不可能使用numpy来获得类似C的速度。所以我想用C实现一个函数,并在python脚本中调用它。我想将一个(numpy)数组传递给C函数,并将该函数中的一个数组返回给python 正确的解决方案应该是编译我的C函数,并在python脚本中使用ctypes来处理它。但我真的不知道如何把它组合起来。因为它是一个安静的大数组,我想传递并返回它,它应该以某种方式使用指针,而不是每次都创建新的副本 #在python的numpy数组中定义/读取 arr=np.零(形状=(

我有一个与速度相关的任务,就我所见,不可能使用numpy来获得类似C的速度。所以我想用C实现一个函数,并在python脚本中调用它。我想将一个(numpy)数组传递给C函数,并将该函数中的一个数组返回给python

正确的解决方案应该是编译我的C函数,并在python脚本中使用ctypes来处理它。但我真的不知道如何把它组合起来。因为它是一个安静的大数组,我想传递并返回它,它应该以某种方式使用指针,而不是每次都创建新的副本

#在python的numpy数组中定义/读取
arr=np.零(形状=(100100))
#在C中定义/编译此函数
def fun(arr):
#做些事情,做些新的事情
返回(arr2)
arr2=mylib.fun(arr)
#在python中使用arr2

而且我的C语言知识有点差。示例中的arr应该是浮点,返回数组arr2可以是整数

“我对C的了解也有点差”-如果你使用Cython或Numba,事情可能会顺利得多。我想用C实现的函数没有那么难。这不是问题所在。但是该数组的包装器和数据类型。相关:使用
arr.ctypes.data\u as(ctypes.c\u voidp)
获取可以传递到c函数中的指针。对于返回数组,我建议也在Python端预先分配它,并以相同的方式将其作为第二个参数传递。这应该可以避免大多数内存管理问题…你确定用C会更快吗?NumPy也是用C编写的,并且为了提高速度而对操作进行了矢量化。