执行循环时错误是列表索引必须是整数,而不是元组
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))
,其中 i
和 j
的范围将超过 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,:]
,或者它们的和、差等。
我想将所有迭代输出存储在一个矩阵(大小为 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))
,其中 i
和 j
的范围将超过 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,:]
,或者它们的和、差等。