2010-08-19 19 views
8

के रूप में बेवकूफ सरणी का उपयोग करना मेरे पास एक .csv फ़ाइल से पढ़ा गया एक 2 डी सरणी है। प्रत्येक पंक्ति एक अंतिम बिंदु वाले डेटा बिंदु का प्रतिनिधित्व करती है जिसमें एक 'कुंजी' होती है जो कि किसी अन्य नम्पी सरणी में 'कुंजी' से मेल खाती है - 'लुकअप टेबल' जैसी थी।लुकअप टेबल

दूसरी तालिका में मूल्यों के साथ पहली तालिका में लाइनों का मिलान करने के लिए सबसे अच्छा (सबसे न्यूम्पीथोनिक) तरीका क्या है?

+0

एक देखने के साथ जवाब 'dict' शांत है, लेकिन यह बड़े देखने तालिकाओं के लिए बहुत अप्रभावी है। यदि आप मूल्यों को "लुकअप" करना चाहते हैं, तो आप 'xp' के साथ' np.interp' का उपयोग अपनी लुकअप कुंजियों और 'एफपी' के रूप में अपने मूल्यों के रूप में कर सकते हैं (जो मुझे लगता है कि फ्लोट होना चाहिए ...)। इस तरह लुकअप पुनरावृत्ति के बजाय मूल 'numpy' में लुकअप किया जाता है (कहें कि आप एक लुकअप टेबल के माध्यम से एक बड़ी छवि डालना चाहते हैं, उदाहरण के लिए एक रंगीन नक्शा लागू करना)। –

उत्तर

7

कुछ उदाहरण डेटा:

import numpy as np 

lookup = np.array([[ 1.  , 3.14 , 4.14 ], 
        [ 2.  , 2.71818, 3.7 ], 
        [ 3.  , 42.  , 43.  ]]) 

a = np.array([[ 1, 11], 
       [ 1, 12], 
       [ 2, 21], 
       [ 3, 31]]) 

बिल्ड कुंजी से एक शब्दकोश लुकअप तालिका में नंबर पंक्ति:

mapping = dict(zip(lookup[:,0], range(len(lookup)))) 

तो फिर तुम लाइनें मैच के लिए शब्दकोश का उपयोग कर सकते हैं। उदाहरण के लिए, तुम सिर्फ तालिकाओं में शामिल होने के लिए करना चाहते हैं:

>>> np.hstack((a, np.array([lookup[mapping[key],1:] 
          for key in a[:,0]]))) 
array([[ 1.  , 11.  , 3.14 , 4.14 ], 
     [ 1.  , 12.  , 3.14 , 4.14 ], 
     [ 2.  , 21.  , 2.71818, 3.7 ], 
     [ 3.  , 31.  , 42.  , 43.  ]])  
+0

+1, सहायक उपकरण का निर्माण स्पष्ट रूप से जाने का तरीका है। –

+0

+1 एलेक्स मार्टेलि से +1 प्राप्त करने के लिए +1;) और एक उपयोगी उत्तर के लिए, ज़ाहिर है। –

+2

जो भी इसके लायक है, इसके लिए एक अंतर्निहित numpy फ़ंक्शन है: 'numpy.lib.recfunctions.join_by'। http://projects.scipy.org/numpy/browser/trunk/numpy/lib/recfunctions.py#L826 यदि आप पहले से संरचित सरणी का उपयोग नहीं कर रहे हैं, तो यह बदसूरत है। –

3

विशेष मामला सूचकांक कुंजी से गणना की जा सकती है जब में, शब्दकोश बचा जा सकता है। यह एक फायदा है जब लुकअप टेबल की कुंजी चुना जा सकता है।

Vebjorn Ljosa के उदाहरण के लिए:

देखने:

>>> lookup[a[:,0]-1, :] 
array([[ 1.  , 3.14 , 4.14 ], 
     [ 1.  , 3.14 , 4.14 ], 
     [ 2.  , 2.71818, 3.7 ], 
     [ 3.  , 42.  , 43.  ]]) 

मर्ज:

>>> np.hstack([a, lookup[a[:,0]-1, :]]) 
array([[ 1.  , 11.  , 1.  , 3.14 , 4.14 ], 
     [ 1.  , 12.  , 1.  , 3.14 , 4.14 ], 
     [ 2.  , 21.  , 2.  , 2.71818, 3.7 ], 
     [ 3.  , 31.  , 3.  , 42.  , 43.  ]]) 
संबंधित मुद्दे