【发布时间】:2016-04-12 10:26:20
【问题描述】:
第一次在这里发布,就这样吧:
我有两组数据(v 和 t),每组有 46 个值。数据通过“pandas”模块导入并转换为 numpy 数组以进行计算。
我需要将 ml_min1[45]、ml_min2[45] 等设置为值“0”。问题是每次我运行脚本时,ml_min1和ml_min2的位置45对应的值都不一样。这是我拥有的一段代码:
t1 = fil_copy.t1.as_matrix()
t2 = fil_copy.t2.as_matrix()
v1 = fil_copy.v1.as_matrix()
v2 = fil_copy.v2.as_matrix()
ml_min1 = np.empty(len(t1))
l_h1 = np.empty(len(t1))
ml_min2 = np.empty(len(t2))
l_h2 = np.empty(len(t2))
for i in range(0, (len(v1) - 1)):
if (i != (len(v1) - 1)) and (v1[i+1] > v1[i]):
ml_min1[i] = v1[i+1] - v1[i]
l_h1[i] = ml_min1[i] * (60/1000)
elif i == (len(v1)-1):
ml_min1[i] = 0
l_h1[i] = 0
print(i, ml_min1[i])
else:
ml_min1[i] = 0
l_h1[i] = 0
print(i, ml_min1[i])
for i in range(0, (len(v2) - 1)):
if (i != (len(v2) - 1)) and (v2[i+1] > v2[i]):
ml_min2[i] = v2[i+1] - v2[i]
l_h2[i] = ml_min2[i] * (60/1000)
elif i == (len(v2)-1):
ml_min2[i] = 0
l_h2[i] = 0
print(i, ml_min2[i])
else:
ml_min2[i] = 0
l_h2[i] = 0
print(i, ml_min2[i])
【问题讨论】:
-
不知道它是否相关,但
i永远不会等于len(v1) - 1,所以elif都不会触发。另外,range(0, x) == range(x)。 -
我猜你的意思是在 0 ≤ i range(len(v1))。但是由于您对最后一个
i的处理方式不同,实际上您可以使用range(len(v1) - 1)并将elif主体移动到for 循环之后(使用-1作为索引而不是i)。 -
"我需要将 v1[45], v2[45] 设置为值 "0"" - 在这段代码中,您没有修改任何一个元素
v1或v2 -
@Marcelo Cantos 有一点,我在其中进行计算
v1[i+1] - v1[i],所以当 i = 45, v1[i+1] = v1[46] 时,它不存在。我认为,这就是问题所在,所以我做了 elif 声明:elif i == (len(v2)-1;为了将 i-postion 45 值设置为零。 -
@ali_m 我的错误,我的意思是
ml_min1,l_h1,...等等。
标签: python for-loop numpy pandas