【问题标题】:'IndexError: index 4 is out of bounds for axis 1 with size 4''IndexError:索引 4 超出轴 1 的范围,大小为 4'
【发布时间】:2020-04-18 17:29:43
【问题描述】:

我正在执行此代码,但我在第 40 行遇到问题,出现索引错误。不知道nr-1里面的for有没有问题。

代码:

import numpy


Z = 1
R = 1
nr = 5
nz = 4
kn = 1
ks = 1
ke = 1
kw = 1

T = numpy.zeros((nr, nz), dtype=float)

vetorq = 1




for a in range(1, 100, 1):
    for i in range(0, nz, 1):
        for j in range(0, nr, 1):



            an = (i + (1 / 2)) * (R ** 2)*nz*kn/ ((nr**2)* Z)
            ae = (i + 2) * Z*ke / nz
            aw = ((i+1)*kw * Z) / nz
            asul = (i + (1 / 2)) * (R ** 2)*nz*ks / (Z * (nr**2))
            ap = an + ae + aw + asul
            aef = 0



            if (i == 0 and j == 0):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + asul * (
                            (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap


            elif(i == 0 and j != 0 and j != nr - 1):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + aw * ((T[i, j - 1]) / ap) + asul * (
                                (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap


            elif(i == 0 and j == nr - 1):
                aef = (i + 2) * R * Z * vetorq / (nr * nz)
                T[i, j] = aw * ((T[i, j - 1]) / ap) + asul * (
                                (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap

            elif(i != 0 and i != nz - 1 and j == nr - 1):
                aef = (i + 2) * R * Z * vetorq / (nr * nz)
                T[i, j] = aw * ((T[i, j - 1]) / ap) + an * ((T[i - 1, j]) / ap) + asul * (
                                (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap

            elif(i == nz - 1 and j == nr - 1):
                aef = (i + 2) * R * Z * vetorq / (nr * nz)
                T[i, j] = aw * ((T[i, j - 1]) / ap) + an * ((T[i - 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) /((nr ** 2) * nz * ap) + aef / ap


            elif(i == nz - 1 and j != 0 and j != nr - 1):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + aw * ((T[i, j - 1]) / ap) + an * ((T[i - 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap

            elif(i == nz - 1 and j == 0):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + an * ((T[i - 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap

            elif(i != 0 and i != nz - 1 and j == 0):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + an * ((T[i - 1, j]) / ap) + asul * (
                                (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i + 1/2) / ((nr ** 2) * nz * ap) + aef / ap

            elif(i != 0 and i != nz - 1 and j != 0 and j!= nr - 1):
                T[i, j] = ae * ((T[i, j + 1]) / ap) + aw * ((T[i, j - 1]) / ap) + an * ((T[i - 1, j]) / ap) + asul * (
                            (T[i + 1, j]) / ap) + 1846.35 * Z * (R ** 2) * (i - 1/2) / ((nr ** 2) * nz * ap) + aef / ap



print(T)

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您的代码的问题是您已将 nr(rows) 和 nz(columns) 与迭代器 i 和 j 互换;您的两个循环必须如下所示,并在 i 上使用 (nr-1) 和在 j 上使用 (nz-1) 更改所有 if、elif 条件。它工作正常。

    for i in range(0, nr, 1):
        for j in range(0, nz, 1):
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2020-10-28
      • 1970-01-01
      • 2015-08-06
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 2018-05-09
      相关资源
      最近更新 更多