我需要用y 2d数组循环,但它给了我错误,它告诉我:追踪(最近一次通话(:文件"plot.py",第18行,iny[k][j]=y[k][j]+1TypeError:"int"对象不是可下标的
import matplotlib.pyplot as plt
import math
import numpy as np
jo =[20,30,40,50,60,70]
for k in jo:
x=[]
mo = str(k)
migo = "".join(["./",mo,"/result_no"])
with open(migo) as f:
for line in f:
x.append(float(line))
y = [jo][0]*120
# print(y)
for i in range(len(x)):
j = int(x[i])
y[k][j] = y[k][j]+1
b = [0]*120
for i in range(len(y[k])):
if (k==10):
if (y[k][i]!=0):
b[i] = - math.log( y[k][i] )
if (k!=10):
if (y[k][i]!=0):
b[i] = -math.log( y[k][i] )-0.01*(i-k)*(i-k)
alp = b[:]
for i in range(len(alp)):
if (alp[i]==0):
b.remove(0)
plt.show()
#fy = plt.plot(y)
ft = plt.plot(b)
plt.show()
如果运行
jo = [20,30,40,50,60,70]
y = [jo][0]*120
print(y)
您将看到y
是一个包含720个元素的一维列表,即120 * len(jo)
。这是因为在y = [jo][0]*120
行中,您创建了一个嵌套列表[[20, 30, 40, 50, 60, 70]]
,然后取该列表的第一个元素[20, 30, 40, 50, 60, 70]
(或jo
(,并将其重复120次。
由于您正在寻找一个由120行、len(jo)
列组成的数组,因此可以创建以下内容:
y = [[0] * len(jo)] * 120
要根据代码示例访问元素,您需要修改for
循环,以获得jo
中元素的索引,即:
for idx, k in enumerate(jo):
x=[]
mo = str(k)
migo = "".join(["./",mo,"/result_no"])
with open(migo) as f:
for line in f:
x.append(float(line))
y = [[0] * len(jo)] * 120
# print(y)
for i in range(len(x)):
j = int(x[i])
y[idx][j] = y[idx][j]+1
您可以考虑是否应该在for
循环中定义y
——我怀疑不是。