'索引器:索引4超出大小为4的轴1的界限'

2024-10-03 23:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写这段代码,但是第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)

Tags: andinnumpyanforrangenrap
1条回答
网友
1楼 · 发布于 2024-10-03 23:19:40

代码的问题是,您已经用迭代器i和j交换了nr(行)和nz(列);您的两个循环必须如下所示,并用(nr-1)更改i上的所有if、elif条件,用(nz-1)更改j上的所有if、elif条件。它很好用

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

相关问题 更多 >