Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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
Python 将自定义C函数与Pandas一起使用(一种简单的方法)_Python_C_Python 3.x_Pandas_Cython - Fatal编程技术网

Python 将自定义C函数与Pandas一起使用(一种简单的方法)

Python 将自定义C函数与Pandas一起使用(一种简单的方法),python,c,python-3.x,pandas,cython,Python,C,Python 3.x,Pandas,Cython,有没有一种方法可以让自定义的C函数作用于一个函数?我知道我可以在python函数中封装一个c函数,并将其用于行式迭代,例如,但这似乎效率低下。我知道熊猫是用c写的。我希望有一个简单的方法告诉熊猫“使用这个c函数”。这是纳伊夫,但有点像这样 ... cFunc = get_c_function_some_how() for i in range(1000): df = df.use_c_function(cFunc) use_df(df) ... 我的用例是,我一次又一次地进行一组简

有没有一种方法可以让自定义的C函数作用于一个函数?我知道我可以在python函数中封装一个c函数,并将其用于行式迭代,例如,但这似乎效率低下。我知道熊猫是用c写的。我希望有一个简单的方法告诉熊猫“使用这个c函数”。这是纳伊夫,但有点像这样

...
cFunc = get_c_function_some_how()

for i in range(1000):
    df = df.use_c_function(cFunc)

use_df(df)
...
我的用例是,我一次又一次地进行一组简单但计算成本有点高的计算,我想让这组计算速度大大加快


编辑:我认为以某种方式将Pandas数据帧的全部传递给C函数是很好的,实际上,无论如何迭代都应该发生在C内部,因此,如果需要使用python包装的C函数一次,那么数据只需交给C进行计算,这似乎是一个很好的解决方案。我个人找不到这样做的文档。

有一种方法可以做到这一点,但我不会说它“简单”

在内部,Pandas使用numpy存储数据。如果你能以numpy向量的形式获取数据,你可以把它传递给C,让它对向量进行运算

从列中获取numpy向量很容易:

vec=df[“foo”]。to_numpy()
接下来,您需要确保向量是连续的。您不能假设是这样,因为如果数据具有兼容的类型,pandas将在同一numpy数组中存储来自多个列的数据

vec=np.ascontiguousarray(vec)
然后,您可以将numpy数组传递给C,如本文所述。这将适用于数值数据。如果你想处理字符串,那就更复杂了


如果你走这条路,我建议你读书。它解释了许多重要的事情,比如为什么numpy数组不是连续的。

我想答案应该是“否”。问题应该是“你的计算写得正确吗”或者“如果你用numpy代替怎么办”这是个好问题。这似乎是显而易见的,但我最近做了很多优化,使之成为可能(我认为),所以这种方法在我的雷达下滑动