我試着用scipy.weave在Python中構建一個快速的最小生成樹程序。不幸的是,我發現使用scipy.weave和我發現的C++庫STANN更加難以實現。以下是鏈接到STANN庫的鏈接:http://sites.google.com/a/compgeom.com/stann/Python scipy.weave和STANN C++庫
下面是帶有我編寫的scipy.weave腳本的Python。
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"])
到目前爲止沒有運氣在編織工作。任何想法爲什麼我遇到問題?謝謝您的幫助。
乾杯
不是你的問題,但你的圖表有多大/多密? (我使用一個簡單的純python MST,排序+ Kruskal + unionfind;大部分時間都是這樣。) – denis 2010-06-30 09:00:13
我通常處理300到30000個節點。有時更大。但是對於投影分析(3D數據),MST需要計算幾次。剛剛找到一種方法來使用networkx和matplotlib.delaunay在Python中編寫一個MST程序,以在大約5秒內計算50,000個源的MST。現在速度夠快了。 – ebressert 2010-07-08 10:56:30