首次在这里发布,这里是:
我有两组数据(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])
答案 0 :(得分:2)
当前编写的代码不起作用,因为elif
块永远不会被命中,因为range(0, x)
不包括x
(它在到达之前停止)。解决此问题的最简单方法可能只是使用numpy.zeros
而不是numpy.empty
来初始化输出数组,因为这样您就无需在elif
和{{1}中执行任何操作块(你可以删除它们)。
也就是说,在numpy代码中使用像你这样的循环通常是一个设计错误。相反,您应该使用numpy的广播功能一次对整个数组(或一个切片)执行数学运算。
如果我理解正确,以下内容应该等同于您希望代码执行的操作(仅适用于其中一个数组,另一个应该相同):
else