IndexError: неверный индекс для скалярной переменной в массиве 2d? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть массив, который 10 на 21 и заполнен нулями.Я пытаюсь пройти первый столбец и переписать каждый элемент в соответствии с уравнением, которое мне дано.Однако это уравнение требует вызова определенных элементов в массиве, в зависимости от значений x и y.Когда я запускаю этот код:

from __future__ import division
import numpy as np


z = 10
p = 21
phi = np.zeros((p, z))

po = 1.0
for po in range(p):
    i = 0
    while i <= 20:
        a = phi[po + (po - 1), 0]
        b = 1 + ((po - 1)/(2))
        c = phi[po - (po - 1), 0]*(1 - ((po - 1)/(2)))
        d = phi[po, 0]
        e = phi[po, 0]
        phi = (1/4)*(a * b + c + d + e)
        i = i + 1
        po = po + 1

, я получаю сообщение об ошибке «IndexError: недопустимый индекс для скалярной переменной».Я не понимаю, почему фи не индексирует должным образом.

Я пытался удалить 0 внутри скобок, а также поменять скобки на круглые скобки.Я ожидаю получить новые значения, записанные по нулям в первом столбце.Я новичок в Python, поэтому еще не слишком разбираюсь в том, как работают массивы, поэтому заранее извините, если мой код слишком прост или содержит больше, чем эта ошибка.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019
import numpy as np
z = 10
p = 21
phi = np.zeros((p, z))

po = 1.0
for po in range(p):
    i = 0
    while i <= 20:
        a = phi[po + (po - 1), 0]
        b = 1 + ((po - 1)/(2))
        c = phi[po - (po - 1), 0]*(1 - ((po - 1)/(2)))
        d = phi[po, 0]
        e = phi[po, 0]
        phi = (1/4)*(a * b + c + d + e)
        print("po:", po, 'phi:', phi, 'a-e:', a,b,c,d,e) # Added to show the problem.
        i = i + 1
        po = po + 1

[Out]    
po: 0 phi: 0.0 a-e: 0.0 0.5 0.0 0.0 0.0

phi теперь является float со значением 0.0.Поэтому на второй итерации:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-1-427fc8d0764c> in <module>()
     10     i = 0
     11     while i <= 20:
---> 12         a = phi[po + (po - 1), 0]
     13         b = 1 + ((po - 1)/(2))
     14         c = phi[po - (po - 1), 0]*(1 - ((po - 1)/(2)))

IndexError: invalid index to scalar variable.

Как показывают некоторые комментарии, в коде есть несколько проблем.например, «po - (po-1)» упрощается до 1. Я бы добавил несколько операторов трассировки печати, чтобы отладить его и получить ожидаемые результаты.

0 голосов
/ 08 мая 2019

Проблема в том, что иногда вы получаете отрицательные значения: например, при первом цикле цикла for, который вы вызываете a = phi[-1,0].

Проблема в том, что вы присваиваете целое числодо phi во время первого цикла перезаписи вашей матрицы.Во второй раз вы получаете доступ к значению phi, которое теперь является целым числом, и это выдает IndexError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...