मैं मैट्रिक्स के तत्व की 1-डी अनुक्रमणिका कैसे प्राप्त करूं?
उदाहरण के लिए:
b=np.array([1, 2, 3, 4, 5, 6])
c = b.reshape(2,3,order='F')#colmaj
d = b.reshape(2,3)#rowmaj
यह ग है:
([[1, 3, 5],
[2, 4, 6]])
यह घ है:
([[1, 2, 3],
[4, 5, 6]])
अगर मैं सी [1,2] करता हूं तो मुझे तत्व 6 मिलता है, और मुझे 1-डी सरणी की अनुक्रमणिका प्राप्त करने की आवश्यकता होती है जो 5 होगी। मैं इसे मानसिक रूप से कर सकता हूं लेकिन अगर मेरे पास एक बड़ा मैट्रिक्स है और मुझे एक का चयन करने की आवश्यकता है यादृच्छिक रूप से तत्व मैं नहीं कर पाऊंगा। मुझे colmajor और rowmajor मेट्रिसेस दोनों के लिए ऐसा करने के लिए फंक्शन लिखने की जरूरत है।
def linearize_colmajor(i, j, m, n):
"""
Returns the linear index for the `(i, j)` entry of
an `m`-by-`n` matrix stored in column-major order.
"""
2 जवाब
बस पंक्ति अनुक्रमणिका को स्तंभों की संख्या से मापें और पंक्ति-प्रमुख क्रम के लिए स्तंभ अनुक्रमणिका जोड़ें। कॉलम-मेजर ऑर्डर के लिए, रो-इंडेक्स को स्केल करने के लिए पंक्तियों की संख्या का उपयोग करें और कॉलम इंडेक्स को फिर से जोड़ें।
इसलिए, rowmaj
संस्करण के लिए चपटा सूचकांक प्राप्त करने के लिए -
i*n+j
colmaj
संस्करण के लिए चपटा सूचकांक प्राप्त करने के लिए -
i*m+j
कहां :
i = row index
j = col index
m = number of rows in the matrix
n = number of columns in the matrix
फंक्शन फॉर्मेट में लाना -
def linearize(i, j, m, n, order='C'):
if order=='C': # rowmaj
return i*n+j
elif order=='F': # colmaj
return i*m+j
else:
raise Exception("Invalid order value")
सैंपल रन -
In [42]: linearize(i=1, j=1, m=2, n=3, order='C')
Out[42]: 4 # element : 5 in rowmaj array, d
In [43]: linearize(i=1, j=1, m=2, n=3, order='F')
Out[43]: 3 # element : 4 in colmaj array, c
np.ravel_multi_index
निर्दिष्ट करने के विकल्प के साथ n-d इंडेक्स को एक फ्लैट में कनवर्ट करता है order
:
In [152]: np.ravel_multi_index((0,2),(2,3),order='C')
Out[152]: 2
In [153]: c[0,2], c.flat[2]
Out[153]: (5, 5)
order='F'
मामले में आवेदन करना थोड़ा पेचीदा है:
In [154]: np.ravel_multi_index([0,2],[2,3],order='F')
Out[154]: 4
In [155]: d[0,2], d.flat[4], d.ravel(order='F')[4]
Out[155]: (3, 5, 3)
In [156]: d.ravel()
Out[156]: array([1, 2, 3, 4, 5, 6])
In [157]: d.ravel(order='F')
Out[157]: array([1, 4, 2, 5, 3, 6])
[1,2]
तत्व दोनों क्रमों में समान है, अंतिम '6'।
@ दिवाकर के उदाहरण के साथ तुलना करें:
In [160]: np.ravel_multi_index([1,1],[2,3],order='C')
Out[160]: 4
In [161]: np.ravel_multi_index([1,1],[2,3],order='F')
Out[161]: 3
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।