Что значит иметь индекс для ошибки скалярной переменной? питон
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" в виде целых чисел. Затем список "x" преобразуется в массив "a". Собственные значения "a" помещаются в "l", а собственные векторы помещаются в "v". Затем я хочу взять exp (a) и поместить его в другой массив "exponent". Затем я создаю единичную матрицу любой длины "l" и называю матрицу "L". Цикл "Мой" должен принимать значения "экспоненты" и заменять 1 по диагонали идентификационной матрицы, но я получаю сообщение об ошибке "Недействительный индекс для скалярной переменной". Что не так с моим кодом?
Ответы
Ответ 1
exponent
- это 1D-массив. Это означает, что exponent[0]
является скаляром, а exponent[0][i]
пытается получить к нему доступ, как если бы он был массивом.
Вы имели в виду сказать:
L = identity(len(l))
for i in xrange(len(l)):
L[i][i] = exponent[i]
или даже
L = diag(exponent)
?
Ответ 2
IndexError: invalid index to scalar variable
происходит, когда вы пытаетесь индексировать скаляр numpy
, например numpy.int64
или numpy.float64
. Он очень похож на TypeError: 'int' object has no attribute '__getitem__'
, когда вы пытаетесь индексировать 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__'