मेरे पास तीन आयामों में N
अंक का संग्रह है। इन्हें (N,3)
के आकार के साथ np.array
के रूप में संग्रहीत किया जाता है। सभी बिंदु ~1e-5
होने के किसी भी दो बिंदुओं के बीच न्यूनतम दूरी के साथ अलग हैं। मैं उन आदेशों को फिर से शुरू करने के साधनों की तलाश में हूं, जो np.array
में उनके वर्तमान क्रम से स्वतंत्र हैं और व्यक्तिगत घटकों के छोटे परेशानियों के लिए मजबूत हैं।NumPy: np.lexsort अस्पष्ट/सहिष्णु तुलना के साथ
In [6]: my_array = np.array([[-0.5, 0, 2**0.5], [0.5, 0, 2**0.5 - 1e-15]])
In [7]: my_array[np.lexsort(my_array.T)]
Out[7]:
array([[ 0.5 , 0. , 1.41421356],
[-0.5 , 0. , 1.41421356]])
जहां हम देख सकते हैं कि इस मामले में आदेश देने की अत्यंत है:
पहली आवश्यकता को संतुष्ट करने का सबसे सरल साधन
np.lexsort(my_array.T)
लेकिन इस मजबूती विभाग में विफल रहता है के साथ np.lexsort
साथ है परेशानियों के प्रति संवेदनशील। इसलिए मैं np.lexsort
का एक अस्पष्ट संस्करण ढूंढ रहा हूं जो अगले अक्ष पर आगे बढ़ेगा यदि एक अक्ष में दो मान epsilon
की सहिष्णुता के भीतर हैं। (या कोई वैकल्पिक तंत्र जो मुझे ऑर्डर प्राप्त करने की अनुमति देगा।)
जैसा कि मेरे आवेदन में इन संग्रहों में से कई मिलियन हैं, जिनमें से सभी को ऑर्डर करने की आवश्यकता है, प्रदर्शन एक चिंता का विषय है (यही कारण है कि मैंने अंधेरे से प्रयास नहीं किया है मेरे स्वयं के सहिष्णु np.lexsort को पहले बिना देखे कि इसे करने का बेहतर तरीका है)।
मुझे वास्तविक भाग द्वारा वास्तविक संख्याओं को क्रमबद्ध करने के लिए और फिर काल्पनिक भाग द्वारा क्रमबद्ध करने के लिए एक ही चीज़ की आवश्यकता है, लेकिन असली भाग प्रकार को कुछ सहनशीलता के भीतर संख्याओं के बराबर मानना चाहिए। क्या तुम्हें कभी कोई हल मिला? इससे पहले कि मैं पहले कर रहा था, उन्हें पहले लगभग क्रमबद्ध करने के लिए लेक्सॉर्ट का उपयोग कर रहा था, और उसके बाद गलत क्रम में मौजूद मानों को समूहित करने के लिए कम इष्टतम बबल-सॉर्ट-जैसी एल्गोरिदम के साथ पुनरावृत्ति कर रहा था। – endolith