2012-03-05 32 views
14

के भीतर कई मान खोजें I इंडेक्स को खोजने के लिए एक numpy फ़ंक्शन की तलाश में है जिसमें वेक्टर (xs) के भीतर कुछ मान पाए जाते हैं। मान किसी अन्य सरणी (ys) में दिए जाते हैं। लौटाए गए सूचकांक को ys के आदेश का पालन करना होगा।एक Numpy सरणी

कोड में, मैं नीचे सूचीबद्ध सूची द्वारा सूची समझ को प्रतिस्थापित करना चाहता हूं।

>> import numpy as np 
>> xs = np.asarray([45, 67, 32, 52, 94, 64, 21]) 
>> ys = np.asarray([67, 94]) 
>> ndx = np.asarray([np.nonzero(xs == y)[0][0] for y in ys]) # <---- This line 
>> print(ndx) 
[1 4] 

क्या कोई तेज़ तरीका है?

धन्यवाद

+0

क्या 'ys' बहुत लंबा होगा? – kennytm

उत्तर

21

बड़ा सरणियों xs और ys के लिए, आप इस के लिए बुनियादी दृष्टिकोण को बदलने के लिए तेजी से बनने के लिए की आवश्यकता होगी।

xs.sort() 
ndx = numpy.searchsorted(xs, ys) 

तो यह महत्वपूर्ण है xs के मूल आदेश रखने के लिए, तो आप इस दृष्टिकोण का उपयोग कर सकें, लेकिन आप याद करने की जरूरत है: आप xs छँटाई के साथ ठीक है, तो एक आसान विकल्प numpy.searchsorted() उपयोग करने के लिए है मूल सूचकांक:

orig_indices = xs.argsort() 
ndx = orig_indices[numpy.searchsorted(xs[orig_indices], ys)] 
+1

यदि आपको ट्रैक करने के लिए सभी इंडेक्स से छुटकारा पाने के लिए आउटपुट को फ़िल्टर करने के लिए आउटपुट को फ़िल्टर नहीं किया जा सकता है, तो आपको ट्रैक करने की आवश्यकता नहीं है: nnd.searchsorted (xs, ys) में ई के लिए ई अगर ई <लेन (एक्सएस)] – Picarus

संबंधित मुद्दे