IndexError:二维数组上标量变量的索引无效?

时间:2019-05-07 23:00:13

标签: python numpy

我有一个10 x 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:标量变量的无效索引”。我不明白为什么phi无法正确建立索引。

我尝试删除括号内的0,并将括号改为括号。我期望在第一列中将新值写入零。我是Python的新手,所以我还不太熟悉数组的工作原理,因此,如果我的代码太简单或包含的错误超过此错误,请提前抱歉。

2 个答案:

答案 0 :(得分:0)

问题是有时您会得到负面的评价:例如,在for循环的第一个循环中,您正在调用a = phi[-1,0]

问题在于您在覆盖矩阵的第一个周期内为phi分配了一个整数。第二次您访问的值phi现在是整数,这将抛出IndexError

答案 1 :(得分:0)

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现在是一个值为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。我在其中添加了一些跟踪打印语句以对其进行调试以返回预期的结果。