【问题标题】:while executing loop the error is list indices must be intergers,not tuple执行循环时错误是列表索引必须是整数,而不是元组
【发布时间】:2015-04-24 06:29:18
【问题描述】:

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

【问题讨论】:

  • 你在哪里初始化i
  • 第一个 for 循环之前
  • 在第一个 for 循环之前,我写了 i=0; ambg=[ ]

标签: list numpy typeerror lis


【解决方案1】:

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,:],或者它们的总和或差等。

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 2015-07-11
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多