栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何处理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, ...]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号