0

我想将所有迭代输出存储在一个矩阵中(大小为 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
4

1 回答 1

1

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

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

如果您初始化ambg=np.zeros((N,M))whereijwill range over range(N)and range(M),那么您的代码应该可以工作。

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

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

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

于 2015-02-23T01:54:57.760 回答