Эффективные массивы в Python

Июль 24, 2007, 00:13

Воз­вра­ща­ясь к теме вы­зо­ва на­тив­ных мо­ду­лей из Python (те­перь это в Lin­ux, но в Win­dows прин­ци­пи­аль­ных раз­ли­чий быть не долж­но).

В Python есть очень по­лез­ный мо­дуль для ра­бо­ты с мас­си­ва­ми, на­зы­ва­ет­ся он, как не стран­но, ar­ray. Это не един­ствен­ный мо­дуль для ра­бо­ты с мас­си­ва­ми, но он очень удо­бен, если необ­хо­ди­мо об­ме­ни­вать­ся мас­си­ва­ми с про­грам­ма­ми на C/C++ (на­при­мер OpenGL тек­стур­ку скор­мить, или про­сто все тя­же­лые вы­чис­ле­ния на C/C++ на­пи­сать):

main.cpp:

extern "C" float some(float* arg, int len)
{
float sum = 0;
for ( int i = 0; i < len; ++i )
sum += arg[i];
return sum;
}

Ком­пи­ли­ру­ем:

> g++ -shared -o slib.so main.cpp

Вы­зы­ва­ем:

>>> from array import *
>>> a = array('f',[1.1]*10)
>>> from ctypes import *
>>> lb = CDLL("/path/to/lib/slib.so")
>>> lb.some.restype = c_float
>>> lb.some(a.tostring(),10)
11.000000953674316

blog comments powered by Disqus
Сергей Лымарь © 2005-2014, Все права защищены.