gpt4 book ai didi

python - Numpy for 循环每次都会给出不同的结果

转载 作者:行者123 更新时间:2023-11-28 17:30:35 25 4
gpt4 key购买 nike

第一次在这里发布,这里是:

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

最佳答案

您当前编写的代码不起作用,因为永远不会命中 elif block ,因为 range(0, x) 不包括 x (它在到达那里之前停止)。解决这个问题最简单的方法可能只是用 numpy.zeros 而不是 numpy.empty 来初始化你的输出数组,从那以后你不需要在elifelse block (您可以删除它们)。

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

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

ml_min1 = np.zeros(len(t1)) # use zeros rather than empty, so we don't need to assign any 0s
diff = v1[1:] - v1[:-1] # find the differences between all adjacent values (using slices)
mask = diff > 0 # check which ones are positive (creates a Boolean array)
ml_min1[:-1][mask] = diff[mask] # assign with mask to a slice of the ml_min1 array
l_h1 = ml_min1 * (60/1000) # create l_h1 array with a broadcast scalar multiplication

关于python - Numpy for 循环每次都会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com