2010-11-06 12 views
8

numpy.unravel_index() एक सरणी में एक आकार और एक फ्लैट इंडेक्स लेता है, और उस ट्यूपल को देता है जो सरणी में उस अनुक्रमणिका का प्रतिनिधित्व करता है। क्या कोई उलटा है? मैं इसे हाथ से गणना कर सकता हूं, लेकिन ऐसा लगता है कि यह कहीं भी एक अंतर्निहित कार्य होना चाहिए ...क्या NumPy unravel_index() का उलटा है?

+1

मुझे लगता है कि आप 'का उपयोग कर ravel_multi_index' एक के लिए स्वीकार किए जाते हैं जवाब अद्यतन करना चाहिए; ज्यादातर लोग अब तक 'न्यूपी 1.6' या नए का उपयोग करेंगे। – gerrit

उत्तर

7

numpy 1.6.0 के बाद से (मई 2011) एक अंतर्निहित NumPy समारोह ravel_multi_index

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

(यह भी उपयोगकर्ता द्वि रीको द्वारा एक टिप्पणी में बताया गया है, लेकिन वास्तव में एक जवाब के रूप में प्रकट करना चाहिए)

2

उत्तर numpy.ndarray.strides में निहित है। http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.strides.html

+1

भरोसेमंद नहीं। जब आप सरणी के स्लाइस लेते हैं, तो numpy अक्सर एक ही डेटा साझा करेगा और स्ट्रिंग चालें करेगा। Arange (15) .reshape ((3,5)) की तुलना करें। Strides (यह एक अच्छा, संगत सरणी होगी) और arange (35) .reshape ((7,5)) [1 :: 2,:]। । –

+0

सच है, और उसमें गैर-दृश्यता वास्तविक दर्द हो सकती है। लेकिन अगर आप अपने आप को चाल चलने की योजना बना रहे हैं (जैसा कि मैं यहां था), उम्मीद है कि आप गारंटी दे सकते हैं कि सरणी संगत है। – D0SBoots

3

देखें यह काम करता है:

def ravel_index(pos, shape): 
    res = 0 
    acc = 1 
    for pi, si in zip(reversed(pos), reversed(shape)): 
     res += pi * acc 
     acc *= si 
    return res 
1

यह एक कमांड में बनाया नहीं है, लेकिन मैं हमेशा निम्नलिखित स्निपेट का उपयोग किया है, यह मानते हुए numpy के डिफ़ॉल्ट पंक्ति-प्रमुख अनुक्रमण किया जा रहा है:

np.sum(np.array(index_tuple[:-1])*np.array(a_matrix.shape[1:]))+np.array(index_tuple[-1]) 
Fortan की तरह (स्तंभ-प्रमुख) अनुक्रमण के लिए

, सूचकांक सिर्फ बदली करने की आवश्यकता:

np.sum(np.array(index_tuple[1:])*np.array(a_matrix.shape[:-1]))+np.array(index_tuple[0]) 

उपर्युक्त में, index_tuple और a_matrix एक ट्यूपल होते हैं जिसमें ब्याज के सूचकांक होते हैं और क्रमशः मैट्रिक्स अनुक्रमित होते हैं। जब स्लाइस लिया जाता है तो इसमें उपरोक्त समस्याएं होती हैं।

+2

numpy 1.6 के रूप में यह कमांड 'numpy.ravel_multi_index', http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel_multi_index.html कमांड में बनाया गया है लेकिन यह प्रश्न बहुत पुराना है। –

+0

धन्यवाद, मैंने नया आदेश नहीं देखा था, इसलिए यह मेरे लिए बहुत उपयोगी है। –

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