क्या numpy में अद्वितीय तत्व प्राप्त करने का कोई तेज़ तरीका है? मैं यह एक उदाहरण मात्र है और मेरी स्थिति में indices1, indices2,...,indices4
सूचकांक के विभिन्न सेट होता है और विभिन्न आकार इस के समान कोड (अंतिम पंक्ति)फास्ट डुप्लिकेट्स numpy और python में हटाने
tab = numpy.arange(100000000)
indices1 = numpy.random.permutation(10000)
indices2 = indices1.copy()
indices3 = indices1.copy()
indices4 = indices1.copy()
result = numpy.unique(numpy.array([tab[indices1], tab[indices2], tab[indices3], tab[indices4]]))
है। आखिरी पंक्ति कई बार निष्पादित की जाती है और इनकॉइड किया जाता है कि यह वास्तव में मेरे कोड में बाधा है ({numpy.core.multiarray.arange}
प्रीसीसिव होने के लिए)। इसके अलावा, आदेश महत्वपूर्ण नहीं है और इंडेक्स सरणी में तत्व int32
प्रकार का है। मैं तत्व मूल्य के साथ हैशटेबल का उपयोग करने के बारे में सोच रहा था और कोशिश की:
seq = itertools.chain(tab[indices1].flatten(), tab[indices2].flatten(), tab[indices3].flatten(), tab[indices4].flatten())
myset = {}
map(myset.__setitem__, seq, [])
result = numpy.array(myset.keys())
लेकिन यह और भी बदतर था।
क्या इसे गति देने का कोई तरीका है? मुझे लगता है कि प्रदर्शन जुर्माना 'फैंसी इंडेक्सिंग' से आता है जो सरणी की प्रतिलिपि बनाता है लेकिन मुझे परिणामस्वरूप तत्व केवल पढ़ने के लिए चाहिए (मैं कुछ भी संशोधित नहीं करता)।
कितनी तेजी से इसे एक सेट में परिवर्तित कर देगा, और फिर एक numpy सरणी में वापस आ जाएगा? – FakeRainBrigand
मैंने इस विधि की जांच की है और यह वास्तव में लगभग 20% खराब – pzo