实现带非整数索引的简单循环时报IndexError如何解决
错误原因
- 核心触发报错的直接问题是你使用浮点数作为数组索引:numpy数组只支持整数、切片等类型作为下标,你代码里计算的
delta = n - 1/2是带0.5的浮点数,直接用来取B[delta-i]就会抛出你遇到的IndexError。 - 你对公式里的半整数下标理解有误:这类工程/数值计算公式里的
B[x - 1/2]是离散格点的常用记法,代表半整数位置的格点值,对应你传入的整数索引数组B的第x-1位元素。 - 额外的逻辑问题:
- A数组初始化长度错误:已知
len(B) = n-1,要计算到A[n],A的长度应为len(B)+1,你用np.zeros_like(B)得到的A和B长度相同,后续访问A[i+1]会越界。 - 赋值逻辑错误:求和结果是
A[n] - A[0],直接给A[1:n]赋值没有意义,且A[0]=1不需要放在循环里重复赋值。 - 内循环范围错误:求和范围是
i=0到n-1,不是固定到nn-1。
- A数组初始化长度错误:已知
修复后代码
import numpy as np # 输入B为长度nn的数组 nn = len(B) # 初始化A的长度为nn+1,对应A[0]到A[nn] A = np.zeros(nn + 1) A[0] = 1 # 初始值仅赋值一次 for n in range(1, nn + 1): summ = 0.0 # 求和范围和公式完全对应:i从0到n-1 for i in range(n): # 半整数下标映射为整数索引:B[n-i-1/2] -> B[n-i-1] b_index = n - i - 1 summ += B[b_index] * (A[i+1] - A[i]) # 按公式变形计算A[n] A[n] = A[0] + summ
内容的提问来源于stack exchange,提问作者user332496
相关产品推荐
相关产品推荐

