2011-08-11 26 views
6

मैं अजगर के लिए नया हूं और मैं समझना चाहता हूं कि कोई सरणी के तत्वों में हेरफेर करने के बारे में कैसे जाता है। अगर मैं उदाहरण के लिए:2 डी सरणी में तत्वों का उपयोग कैसे करें?

a= (a11 a12 a13) and b = (b11 b12 b13) 
    a21 a22 a23    b21 b22 b23 

मैं उदाहरण के लिए के रूप में अजगर में उन्हें परिभाषित किया है:

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

मैंने देखा कि मैं a[1][1] का उल्लेख नहीं कर सकता लेकिन a[1] को जो मुझे [2,1] का एक परिणाम देता है। तो, मुझे समझ में नहीं आता कि मैं इन सरणी की दूसरी पंक्ति तक कैसे पहुंचूं? यह a21, a22, a23, b21, b22, b23 होगा? और c1 = a21*b21, c2 = a22*b22, आदि के रूप में उन्हें गुणा करने के लिए मैं कैसे करूँगा?

+1

अब numpy का उपयोग शुरू करने के लिए सबसे अच्छा है! –

+2

क्या आपको '[1] [1] 'का मूल्यांकन करने का प्रयास करते समय कोई त्रुटि मिली? यह 1 हो गया है। आपको क्या मिला? –

उत्तर

6

आप

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

है, तो फिर

a[1][1] 

ठीक काम करेगा। यह दूसरे कॉलम को इंगित करता है, दूसरी पंक्ति जैसे आप चाहते थे।

मुझे यकीन नहीं है कि आपने क्या किया है।

तीसरे स्तंभ में कोशिकाओं गुणा करने के लिए आप सिर्फ

c = [a[2][i] * b[2][i] for i in range(len(a[2]))] 

कौन सा पंक्तियों के किसी भी संख्या के लिए काम करेंगे कर सकते हैं।

संपादित करें: पहला नंबर कॉलम है, दूसरा नंबर आपकी वर्तमान लेआउट के साथ पंक्ति है। वे दोनों शून्य से गिने गए हैं। अपेक्षा के अनुरूप

a=[[1, 2, 3], [1, 1, 1]] 
+0

ऐसा इसलिए है क्योंकि 'एक [1]' में केवल दो आइटम हैं। सरणी शून्य से शुरू की गई हैं। 'एक [1]' कॉलम 1 है, इसलिए केवल 'एक [1] [0] 'और' एक [1] [1] 'है। – agf

+0

वाह! मैं तेज़ उत्तरों से प्रभावित हूं। यह मेरी गलती भी थी क्योंकि मैंने इसे एक बड़ी समस्या से बी के मामले में सरल बना दिया था। और वास्तव में एक [0] [0], एक [1] [1] काम करता है, लेकिन जैसा कि मैंने कोशिश की [1] [2] मुझे त्रुटि मिली: ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "" , लाइन 1, एक [1] [2] इंडेक्स एरर: श्रेणी से बाहर सूची सूची ... और यह कुछ मंचों पर पढ़ने के साथ संयुक्त है कि सरणी पाइथन के साथ बिल्कुल संगत नहीं हैं, मुझे लगता है कि मैं कुछ गलत कर रहा था । फिर सबको धन्यवाद! – caran

0

यहां काम करने के लिए लगता है:

>>> a=[[1,1],[2,1],[3,1]] 
>>> a 
[[1, 1], [2, 1], [3, 1]] 
>>> a[1] 
[2, 1] 
>>> a[1][0] 
2 
>>> a[1][1] 
1 
0

a[1][1] काम करता है: आप स्विच करना चाहते हैं आप

a = zip(*a) 

कर सकते हैं या आप इसे इस तरह से बना सकते हैं। क्या आप पहली पंक्ति के पहले तत्व के रूप में a11 का मतलब है? क्योंकि यह एक [0] [0] होगा।

3

यदि आप 2 डी सरणी के साथ कई गणना करना चाहते हैं, तो आपको घोंसला सूची के बजाय NumPy array का उपयोग करना चाहिए।

अपने प्रश्न के लिए

, तो आप उपयोग कर सकते हैं: ज़िप (* क) यह स्थानांतरित करने के लिए:

In [55]: a=[[1,1],[2,1],[3,1]] 
In [56]: zip(*a) 
Out[56]: [(1, 2, 3), (1, 1, 1)] 
In [57]: zip(*a)[0] 
Out[57]: (1, 2, 3) 
0

देखो ध्यान से कितने कोष्ठक अपने सरणी है।मैं एक उदाहरण मिले जब समारोह अतिरिक्त ब्रैकेट के साथ जवाब लौट आए, उस तरह:

>>>approx 
array([[[1192, 391]], 
     [[1191, 409]], 
     [[1209, 438]], 
     [[1191, 409]]]) 

और यह

>>> approx[1,1] 
IndexError: index 1 is out of bounds for axis 1 with size 1 

काम नहीं किया यह कोष्ठक खोल सकता है:

>>> approx[:,0] 
array([[1192, 391], 
     [1191, 409], 
     [1209, 438], 
     [1191, 409]]) 

अब यह सामान्य तत्व पहुंच नोटेशन का उपयोग करना संभव है:

>>> approx[:,0][1,1] 
409 
संबंधित मुद्दे