Библиотека Python scipy.weave и STANN C

#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. Спасибо за рекомендацию.