2013-02-06 11 views
6

मैं उत्तल हॉल को देखने के लिए एक त्वरित हैक के लिए scipy (0.10.1) का उपयोग करने की कोशिश कर रहा हूं।उत्तल हुल और SciPy

मैं निम्नलिखित कोड का उपयोग कर उत्तल पतवार प्राप्त कर सकते हैं:

vecs = [[-0.094218, 51.478927], [-0.09348, 51.479364], [-0.094218, 51.478927], 
     ... 
     [-0.094218, 51.478927], [-0.094321, 51.479918], [-0.094218, 51.478927], 
     [-0.094222, 51.478837], [-0.094241, 51.478388], [-0.094108, 51.478116], 
     [-0.09445, 51.480279], [-0.094256, 51.478028], [-0.094326, 51.500511]] 
hull = scipy.spatial.Delaunay(vecs).convex_hull 

जिसके परिणामस्वरूप सरणी इस तरह दिखता है:

[[56, 9], [16, 1], [56, 1], [55, 9], [53, 55], [53, 16]] 

संख्या शिखर सूचकांक कर रहे हैं। मेरी समस्या है उन्हें का आदेश नहीं दिया गया है। केएमएल में उन्हें आसानी से देखने के लिए मुझे उन्हें सीडब्ल्यू या सीसीडब्ल्यू ऑर्डर में रहने की आवश्यकता होगी।

क्या scipy.spatial उचित घड़ी के क्रम की गणना करने का कोई आसान तरीका है?

उत्तर

10

तो यह कोड चाल करने लगता है, लेकिन यह आसान हो सकता है ... अनिवार्य रूप से, मैं पहले खोपड़ी से कशेरुक संख्या एकत्र करता हूं। फिर मैं मतलब, हाल ही में डेटासेट की गणना करता हूं और इसे कोण से कोण से सॉर्ट करता हूं।

ps = set() 
for x, y in hull: 
    ps.add(x) 
    ps.add(y) 
ps = numpy.array(list(ps)) 
center = vecs[ps].mean(axis=0) 
A = vecs[ps] - center 
h = vecs[ps[numpy.argsort(numpy.arctan2(A[:,1], A[:,0]))]] 
4

मैं एक अच्छा विधि पता चला, लेकिन यह scipy 0.11.0 (sparse.csgraph) की आवश्यकता है

यहाँ एक पूर्ण उदाहरण है, वास्तविक छंटाई "प्रकार पतवार निम्नलिखित 2 lignes रहे हैं ... " टिप्पणी।

import numpy as np 
import scipy as sp 

# random point cloud and hull 
X = np.random.randint(0,200,(30,2)) 
hull = sp.spatial.qhull.Delaunay(X).convex_hull 

# sort hull indices using (sparse) adjacency matrix graph stuff 
g = sp.sparse.csr_matrix((np.ones(hull.shape[0]),hull.T), shape=(hull.max()+1,)*2) 
sorted_hull = sp.sparse.csgraph.depth_first_order(g,hull[0,0],directed=False)[0] 

# display with matplotlib 
from matplotlib import pyplot as plt 
plt.plot(X[:,0],X[:,1],'.') 
plt.plot(X[sorted_hull,0],X[sorted_hull,1]) 
8

scipy.spatial.ConvexHull की वर्तमान देव डॉक (0.13.0.dev) में, वहाँ एक vertices संपत्ति जो 2D में वामावर्त है।