Индекс выходит за пределы для оси 0 с размером 100

1

У меня есть функция, где я заполняю 2D-массив 100x100 со значениями, итерациями по циклу for. Мне нужно сохранить значения в позициях [i] [i], [i] [i-1] и [i] [i + 1]. Вот что я до сих пор:

    Delta = 1/100
    N = 100 
    Matrix = np.zeros(N,N), int)

    for i in range(N):
       Matrix[i][i] = ((2*D)/pow(Delta,2) + SigmaA)
       Matrix[i][i-1] = -(D/pow(Delta,2))
       Matrix[i][i+1] = -(D/pow(Delta,2))
  • 1
    Matrix[i][i+1] является проблемой. N равно 100, поэтому i перейду от 0 до 99. Когда i равно 99. i+1 равно 100, что выходит за пределы. (Ваши действительные индексы для каждого измерения изменяются от 0 до 99.)
  • 0
    Что сказал @StevenRumbalski. Если вы собираетесь создать такой диапазон и добавить что-то к -1 и +1 (что удивляет, что 0 не выдало ошибку), вам нужно перейти к диапазону (1, 99)
Показать ещё 2 комментария
Теги:
arrays
numpy

1 ответ

0
Лучший ответ

i+1 и i-1 пытаются получить доступ к недопустимому индексу. Сделайте свою матрицу 1 больше, чем нужно, и иметь range начинается с 1 и перейти к N + 1.

Delta = 1/100
N = 100 
Matrix = np.zeros(N+1,N+1), int)

for i in range(1,N+1):
   Matrix[i][i] = ((2*D)/pow(Delta,2) + SigmaA)
   Matrix[i][i-1] = -(D/pow(Delta,2))
   Matrix[i][i+1] = -(D/pow(Delta,2))
  • 1
    Ваши индексы варьируются от 0 до N (не 1, N + 1).
  • 0
    @Joooeey Спасибо
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню