您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何处理C ++返回类型std :: vector 在Python ctypes?

如何处理C ++返回类型std :: vector 在Python ctypes?

特殊原因是速度很重要。我正在创建一个应该能够处理大数据的应用程序。在200,000行中,必须按300个值(200k x 300矩阵)计算缺失。我相信,但是如果我错了,请纠正我,C ++的速度将大大提高。

好吧,如果您正在读取一个文件,则您的进程将主要受IO限制,因此Python和C之间的时间安排可能不会有很大不同。

以下代码

result = []
for line in open('test.txt'):
    result.append(line.count('NA'))

…似乎可以像我在C中可以一起破解的任何东西一样快地运行,尽管它使用的是我不太熟悉的优化算法

处理200,000行只需不到一秒钟的时间,尽管我很想知道您是否可以编写一个速度明显更快的C函数

如果您想用C语言编写并以python列表结尾,那么使用Python / C API自己构建列表可能会更有效,而不是std::vector稍后再构建然后转换为python列表

一个示例,它仅返回一个从0到99的整数列表…

// hack.c

#include <python2.7/Python.h>

PyObject* foo(const char* filename)
{
    PyObject* result = PyList_New(0);
    int i;

    for (i = 0; i < 100; ++i)
    {
        PyList_Append(result, PyInt_FromLong(i));
    }

    return result;
}

编译…

$ gcc -c hack.c -fPIC
$ ld -o hack.so -shared hack.o -lpython2.7

用法示例…

>>> from ctypes import *
>>> dll = CDLL('./hack.so')
>>> dll.foo.restype = py_object
>>> dll.foo('foo')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...]
python 2022/1/1 18:25:17 有199人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶