2012-11-27 2 views
16
import numpy as np 

with open('matrix.txt', 'r') as f: 
    x = [] 
    for line in f: 
     x.append(map(int, line.split())) 
f.close() 

a = array(x) 

l, v = eig(a) 

exponent = array(exp(l)) 

L = identity(len(l)) 

for i in xrange(len(l)): 
    L[i][i] = exponent[0][i] 

print L 

मेरे कोड एक मैट्रिक्स युक्त एक पाठ फ़ाइल को खोलता है:
1 2
3 4
और पूर्णांक के रूप में सूची में "x" यह देता है। सूची "एक्स" को फिर एक सरणी "ए" में परिवर्तित कर दिया जाता है। "ए" के eigenvalues ​​"एल" में रखा गया है और eigenvectors "v" में रखा गया है। मैं फिर एक्स (ए) लेना चाहता हूं और इसे किसी अन्य सरणी "एक्सपोनेंट" में रखना चाहता हूं। फिर मैं जो भी लंबाई "एल" की पहचान मैट्रिक्स बनाता हूं और मैट्रिक्स "एल" को कॉल करता हूं। माई फॉर लूप का मानना ​​है कि "एक्सपोनेंट" के मानों को लेना और पहचान मैट्रिक्स के विकर्ण में 1 को प्रतिस्थापित करना है, लेकिन मुझे "त्रुटि सूचकांक के लिए अमान्य अनुक्रमणिका" कहने में त्रुटि मिलती है। मेरे कोड में क्या गलत है?स्केलर परिवर्तनीय त्रुटि के लिए एक सूचकांक होने का क्या मतलब है? अजगर

+2

ट्रेसबैक पोस्ट करें :) –

उत्तर

12

exponent एक 1 डी सरणी है। इसका मतलब है कि एक स्केलर है, और exponent[0][i] इसे एक्सेस करने का प्रयास कर रहा है जैसे कि यह एक सरणी थी।

आप कह रहे थे:

L = identity(len(l)) 
for i in xrange(len(l)): 
    L[i][i] = exponent[i] 

या यहाँ तक कि

L = diag(exponent) 

?

+0

बहुत बहुत धन्यवाद! मेरी समस्या हल हो गई! यही वही है जो मेरा मतलब था। – Randy

6

IndexError: invalid index to scalar variable होता है जब आप सूचकांक करने के लिए इस तरह के रूप numpy.int64 या numpy.float64 एक numpy अदिश प्रयास करें। को इंडेक्स करने का प्रयास करते समय यह TypeError: 'int' object has no attribute '__getitem__' के समान ही है।

>>> a = np.int64(5) 
>>> type(a) 
<type 'numpy.int64'> 
>>> a[3] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: invalid index to scalar variable. 
>>> a = 5 
>>> type(a) 
<type 'int'> 
>>> a[3] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object has no attribute '__getitem__' 
+0

और इस त्रुटि को कैसे ठीक करें? धन्यवाद! –

+2

@hoangtran, इसे ठीक करने के लिए आपको अपना कोड ठीक करना होगा। कोई अर्थपूर्ण परिणाम नहीं है कि '5 [2] 'आपको दे सकता है। कहीं, आपको लगता है कि एक सरणी में वास्तव में ऐसा करने से 1 और आयाम होता है। – Akavall

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