Numpy for循环每次都会产生不同的结果

时间:2016-01-07 21:06:28

标签: python for-loop numpy pandas

首次在这里发布,这里是:

我有两组数据(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])

1 个答案:

答案 0 :(得分:2)

当前编写的代码不起作用,因为elif块永远不会被命中,因为range(0, x)不包括x(它在到达之前停止)。解决此问题的最简单方法可能只是使用numpy.zeros而不是numpy.empty来初始化输出数组,因为这样您就无需在elif和{{1}中执行任何操作块(你可以删除它们)。

也就是说,在numpy代码中使用像你这样的循环通常是一个设计错误。相反,您应该使用numpy的广播功能一次对整个数组(或一个切片)执行数学运算。

如果我理解正确,以下内容应该等同于您希望代码执行的操作(仅适用于其中一个数组,另一个应该相同):

else