Что значит иметь индекс для ошибки скалярной переменной? питон - программирование
Подтвердить что ты не робот

Что значит иметь индекс для ошибки скалярной переменной? питон

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 по диагонали идентификационной матрицы, но я получаю сообщение об ошибке "Недействительный индекс для скалярной переменной". Что не так с моим кодом?

4b9b3361

Ответ 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__'