执行循环时错误是列表索引必须是整数,而不是元组

while executing loop the error is list indices must be intergers,not tuple

我想将所有迭代输出存储在一个矩阵(大小为 200x200)中。 执行代码时:在

处出现错误
for t in (T2/Taw)*np.arange(-Taw,Taw-1):
    i=i+1;
    j=0;
    for Fd in (B/Taw)*np.arange(-Taw,Taw-1):
        j=j+1;
        val1=1-abs(t)/T2;
        val2=pi*T2*val1;
        val3=Fd+mu*t+np.spacing(1);
        val4=val2*val3;
        ambg[j,i]=np.abs(val1*(sin(val4)/(val4)))**2;


---> 62         ambg[j,i]=np.abs(val1*(sin(val4)/(val4)))**2;

              TypeError: list indices must be integers, not tuple

ambg=[] 是一个列表。它只能用整数索引,例如 ambg[i]ambg[i,j] 等同于 ambg[(i,j)],其中 (i,j) 是一个元组。因此出现错误消息。

如果 ambg 是一个列表列表,那么它可以被索引为 ambg[i],[j]。但是列表的列表通常是通过将值迭代地附加到列表来构造的。

如果您初始化 ambg=np.zeros((N,M)),其中 ij 的范围将超过 range(N)range(M),那么您的代码应该可以工作。

然而,像这样逐个元素地初始化一个 numpy 数组很慢,并且被认为是不好的做法。我没有详细研究你的代码,但看起来你可以使用 T = (T2/Taw)*np.arange(-Taw,Taw-1)FD = (B/Taw)*np.arange(-Taw,Taw-1).

通过矢量运算构造 ambg

例如T[:,None]是单列数组,而FD[None,:]是一个 单行数组,它们一起可用于根据其值的所有组合计算 NxN 数组。

尝试一些更简单的东西,例如 I = np.arange(10)J = np.arange(10),然后查看 I[:,None]*J[None,:],或者它们的和、差等。