doza_andСпасибо большое! Дело сдвинулось с мертвой точки, по крайней мере что-то запустилось и работает/ Функция f, конечно же внутри сишного модуля и она будет не единственная.
Если вас интересует быстродействие то думаю надо начать с того где определена funct - ваша функция преобразования.
$ cat test.py
#!/usr/bin/python
import ctypes as C
import numpy as N
mymod=N.ctypeslib.load_library('libmy', '.')
a=N.ones([1,2,3,4],dtype='d')
b=N.ones(4,dtype='d')
mymod.mycopy(a.ctypes.data,4,b.ctypes.data)
$ cat libmy.c
#include <stdio.h>
void mycopy( const double* arg, int n, double* result ) {
int i;
for(i=0; i<n; ++i) result[i]=1.+arg[i];
}
doza_and1. vector просто удобнее для написания, например тот же размер в коде на С нужно передавать, а с вектором можно было бы убрать лишний параметр. Но потеря в скорости мне точно не нужна. Не могли бы объяснить какие преобразования вы имеете ввиду?
std::vector вам будет только мешать в преобразованиях туда сюда.
2. сишной функции как параметр нужно будет передавать список площадок, которые заданы вершинами и их 3-ри или 4-ре, каждая вершина задана 3-мя координатами. Т.е. в плюсах я бы использовал вектор площадок std::vector<Segm>, где структура Segm хранит вектор вершин (точек) , что-то типа Segm { std::vector<Point> ; } + может быть размер, а структура точка имеет три координаты Point{ double x,y,z;}. Строго numpy.array((3,3,3)) или numpy.array((3,4,3)) не подходят. Как здесь можно достигнуть совместимости Питон функции и Сишной (плюсовой) библиотеки?
3. so библиотека собранная компилятором c++ не работает в Питоне, а c gcc все ok. Это нормально?