2015-08-24 6 views
9

क्या एक बार में NumPy सरणी में कई तत्वों के सूचकांक प्राप्त करने का कोई तरीका है?एक बार NumPy सरणी में कई तत्वों के सूचकांक प्राप्त करना

उदा।

import numpy as np 
a = np.array([1, 2, 4]) 
b = np.array([1, 2, 3, 10, 4]) 

मैं b में a के प्रत्येक तत्व के सूचकांक को खोजने के लिए, अर्थात् चाहते हैं: [0,1,4]

import numpy as np 

a = np.array([1, 2, 4]) 
b = np.array([1, 2, 3, 10, 4]) 

c = np.zeros_like(a) 
for i, aa in np.ndenumerate(a): 
    c[i] = np.where(b==aa)[0] 

print('c: {0}'.format(c)) 

आउटपुट::

मैं समाधान मैं वर्बोज़ थोड़ा उपयोग कर रहा हूँ लगता है

c: [0 1 4] 
+1

np.where (np.in1d ​​(बी, ए)) रिटर्न (सरणी ([0, 1, 4], dtype = int64),)। Http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html पर अंतिम उदाहरण के आधार पर। –

उत्तर

12

आप इस्तेमाल कर सकते हैं in1d और nonzero (या where उस बात के लिए):

>>> np.in1d(b, a).nonzero()[0] 
array([0, 1, 4]) 

यह आपके उदाहरण सरणी के लिए ठीक काम करता है, लेकिन सामान्य रूप से ar लौटाए गए सूचकांक की किरण a में मूल्यों के क्रम का सम्मान नहीं करती है। आप जो भी करना चाहते हैं उसके आधार पर यह एक समस्या हो सकती है।

उस मामले में, एक बेहतर जवाब एक @Jaime है here देता है, searchsorted का उपयोग कर:

>>> sorter = np.argsort(b) 
>>> sorter[np.searchsorted(b, a, sorter=sorter)] 
array([0, 1, 4]) 

यह मूल्यों के लिए सूचकांक रिटर्न के रूप में वे a में दिखाई देते हैं। उदाहरण के लिए:

a = np.array([1, 2, 4]) 
b = np.array([4, 2, 3, 1]) 

>>> sorter = np.argsort(b) 
>>> sorter[np.searchsorted(b, a, sorter=sorter)] 
array([3, 1, 0]) # the other method would return [0, 1, 3] 
2

यह एक सरल एक लाइनर numpy-indexed पैकेज का उपयोग है (अस्वीकरण: मैं उसके लेखक हूँ):

import numpy_indexed as npi 
idx = npi.indices(b, a) 

कार्यान्वयन पूरी तरह से vectorized है, और यह आप पर नियंत्रण देता है लापता मूल्यों का प्रबंधन। इसके अलावा, यह एनडी-एरे के लिए भी काम करता है (उदाहरण के लिए, बी में पंक्तियों के सूचकांक ढूंढना)।

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