#c #python #numpy #scipy
#c #python #numpy #scipy
Вопрос:
Я пробую scipy.weave для создания быстрой программы с минимальным связующим деревом на Python. К сожалению, использовать scipy.weave с найденной мной библиотекой C , STANN, сложнее, чем я предполагал. Вот ссылка на библиотеку STANN: http://sites.google.com/a/compgeom.com/stann
Ниже приведен скрипт Python с scipy.weave, который я написал.
import scipy.weave as weave
from scipy.weave import inline
import numpy
def gmst(points):
# computing GMST with STANN headers
assert(type(points) == type(numpy.array([])))
# now the c code
code = """
using namespace std;
typedef reviver::dpoint<double,2> Point;
typedef vector<Point>::size_type stype;
vector< std::pair<stype,stype> > outputmst;
PyArrayObject *py_val
gmst(points,outputmst);
return_val = outputmst;
"""
return inline(code,['points'],
headers = ["<iostream>","<gmst.hpp>","<dpoint.hpp>","<test.hpp>"],
include_dirs=["/home/tree/usr/STANN/include"])
Пока не удалось заставить weave работать. Есть идеи, почему я столкнулся с проблемой? Спасибо за помощь.
Приветствия
Комментарии:
1. Не ваш вопрос, но насколько велики / плотны ваши графики? (Я использую простой MST на чистом python, sort Kruskal unionfind; большая часть времени уходит на сортировку.)
2. Обычно я имею дело с 300-30 000 узлами. Иногда больше. Но MST необходимо вычислять довольно много раз для анализа проекции (3D-данные). Только что нашел способ написать MST-программу на Python, используя networkx и matplotlib.delaunay, чтобы вычислить MSTS из 50 000 источников примерно за 5 секунд. На данный момент это достаточно быстро.
Ответ №1:
Обертывание внешнего кода с помощью weave — хрупкое и хакерское дело. Вам стоит взглянуть на Cython — он великолепен в такого рода вещах.
Комментарии:
1. Я взгляну на Cython. Спасибо за рекомендацию.