2014-10-04 10 views
17

पर आधारित सरणी पुनर्नवीनीकरण करें, मैं एक लाइन समाधान ढूंढ रहा हूं जो मुझे निम्नलिखित करने में मदद करेगा।बेवकूफ: इंडेक्स सरणी

मान लीजिए मैं

array = np.array([10, 20, 30, 40, 50]) 

है मैं एक इनपुट आदेश के आधार पर यह पुनर्व्यवस्थित करने के लिए करना चाहते हैं। अगर वहाँ एक numpy समारोह arrange कहा जाता है, तो वह निम्न करना होगा:

newarray = np.arrange(array, [1, 0, 3, 4, 2]) 
print newarray 

    [20, 10, 40, 50, 30] 

औपचारिक रूप से, यदि सरणी पुनर्क्रमित जा करने के लिए MXN है, और "सूचकांक" सरणी 1 xn है, आदेश द्वारा निर्धारित की जायेगी सरणी "इंडेक्स" कहा जाता है।

क्या numpy के पास ऐसा कोई कार्य है?

उत्तर

23

आप बस अपनी "अनुक्रमणिका" सूची सीधे, के रूप में, ठीक है, एक सूचकांक सरणी का उपयोग कर सकते हैं:

>>> arr = np.array([10, 20, 30, 40, 50]) 
>>> idx = [1, 0, 3, 4, 2] 
>>> arr[idx] 
array([20, 10, 40, 50, 30]) 

यह आदत बहुत तेजी से होने के लिए अगर idx पहले से ही एक ndarray और नहीं एक list है, भले ही यह किसी भी तरह से काम करेगा:

>>> %timeit arr[idx] 
100000 loops, best of 3: 2.11 µs per loop 
>>> ai = np.array(idx) 
>>> %timeit arr[ai] 
1000000 loops, best of 3: 296 ns per loop 
+2

धन्यवाद! क्या होगा यदि "अनुक्रमणिका" 2 डी सरणी है? उदाहरण के लिए मैं इंडेक्स का उपयोग करके '[[1,2], [" ए "," बी "] '' [[2,1], ["a", "b"]] में बदलना चाहता हूं [ [1,0], [0,1]] '। मुझे इंडेक्स सरणी की इसी पंक्ति का उपयोग करके सरणी की प्रत्येक पंक्ति को दोबारा व्यवस्थित करने के लिए फॉर-लूप का उपयोग करने के लिए एक बदसूरत तरीका पता है। लेकिन एक तेज रास्ता होना चाहिए। – Skywalker326

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