我需要使用y 2d数组循环,但这给了我错误,它告诉我: 追溯(最近一次通话): 在第18行的文件“ plot.py”中 y [k] [j] = y [k] [j] +1 TypeError:“ 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()
答案 0 :(得分:0)
如果您运行
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
您可能会考虑是否应该在y
循环中定义for
-我怀疑不是。