2012-11-27 16 views
16
Python
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 

Mein Code öffnet eine Textdatei mit einer Matrix auf:
1 2
3 4
und legt sie in der Liste "x" als ganze Zahlen. Die Liste "x" wird dann in ein Array "a" umgewandelt. Die Eigenwerte von "a" werden in "l" platziert und die Eigenvektoren werden in "v" platziert. Ich möchte dann das exp (a) nehmen und es in einem anderen Array "Exponent" platzieren. Dann erstelle ich eine Identitätsmatrix beliebiger Länge "l" und nenne die Matrix "L". Meine for-Schleife soll die Werte von "exponential" nehmen und die 1en über die Diagonale der Identitätsmatrix ersetzen, aber ich erhalte den Fehler "Invalid Index to Scalar Variable". Was ist falsch an meinem Code?Was bedeutet es, einen Index für skalare Variablenfehler zu haben?

+2

Post die Rückverfolgung bitte :) –

Antwort

12

exponent ist ein 1D-Array. Dies bedeutet, dass ein Skalar ist und exponent[0][i] versucht, darauf zuzugreifen, als wäre es ein Array.

Hast du damit sagen:

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

oder sogar

L = diag(exponent) 

?

+0

Vielen Dank soooo! Löste mein Problem! Genau das meinte ich. – Randy

6

IndexError: invalid index to scalar variable passiert, wenn Sie versuchen, einen numpy Skalar wie numpy.int64 oder numpy.float64 zu indexieren. Es ist sehr ähnlich zu TypeError: 'int' object has no attribute '__getitem__', wenn Sie versuchen, eine int zu indizieren.

>>> 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

und wie man diesen Fehler behebt? Vielen Dank! –

+2

@hoangtran, um es zu beheben, müssen Sie Ihren Code reparieren. Es gibt kein bedeutungsvolles Ergebnis, das '5 [2]' Ihnen geben kann. Irgendwo denken Sie, dass ein Array eine Dimension mehr hat, als es wirklich tut. – Akavall

Verwandte Themen