2012-11-27 13 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 

Mój kod otwiera plik tekstowy zawierający matrycę:
1 2
3 4
i umieszcza go na liście „x” jako liczby całkowite. Lista "x" jest następnie przekształcana w tablicę "a". Wartości własne "a" umieszcza się w "l", a wektory własne umieszcza się w "v". Następnie chcę wziąć exp (a) i umieścić go w innej tablicy "wykładnik". Następnie tworzę matrycę tożsamości o dowolnej długości "l" i wywołuję macierz "L". Moja pętla for ma przyjmować wartości "wykładnika" i zastępować wartości 1 na przekątnej macierzy tożsamości, ale pojawia się komunikat "nieprawidłowy indeks do zmiennej skalarnej". Co jest nie tak z moim kodem?Co to znaczy mieć indeks do skalarnego błędu zmiennej? pyton

+2

opublikuj ślad zwrotny proszę :) –

Odpowiedz

12

exponent to tablica 1D. Oznacza to, że jest skalarem, a exponent[0][i] próbuje uzyskać do niego dostęp, jakby był tablicą.

Czy chcesz powiedzieć:

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

lub nawet

L = diag(exponent) 

?

+0

Dziękuję bardzo, bardzo! Rozwiązałem mój problem! Dokładnie to miałem na myśli. – Randy

6

IndexError: invalid index to scalar variable dzieje się podczas próby indeksowania skalaru numpy, takiego jak numpy.int64 lub numpy.float64. Jest bardzo podobny do TypeError: 'int' object has no attribute '__getitem__' podczas próby indeksowania int.

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

i jak naprawić ten błąd? Dziękuję Ci! –

+2

@hoangtran, aby to naprawić, musisz naprawić swój kod. Nie ma znaczącego wyniku, który może ci dać '5 [2]'. Gdzieś myślisz, że tablica ma jeszcze jeden wymiar, niż naprawdę. – Akavall