Python迭代行与复杂的计算比当前代码更快的方式



我在pandas中实现了某种对象稳定性计算器。但是表演时间太可怕了。有人能帮我一下吗?

def calculate_stability(ind, df, sidx, max_k):
indexes = sidx[:, ind]
indexes = np.delete(indexes, np.where(indexes == ind))
d = 0
last_crtit_obj_count = 0
for j in range(max_k):
if df.at[ind, "Class"] == df.at[indexes[j], "Class"]:
d = d + 1
if d / (j+1) > 1/2:
last_crtit_obj_count = (j+1)
print(f't Object {ind} = {last_crtit_obj_count / max_k}')
return last_crtit_obj_count / max_k

df。我的速度很慢。这就是为什么我改成了df.at。

代码在这里

需要循环的矢量化版本。

下面是没有循环的版本:

def calculate_stability(ind, df, sidx, max_k):
indexes = sidx[:, ind]
indexes = indexes[indexes != ind][:max_k]
# `d` contains all values from the first condition from the original loop:
d = (df["Class"][ind] == df["Class"][indexes]).cumsum()
# `j` contains all values from the original `range` + 1:
j = np.arange(1, len(d) + 1)
# select `last_crtit_obj_count` values:
crtit_objs = j[(d / j > 1 / 2)]
# calculate `last_crtit_obj_count / max_k`
result = crtit_objs[-1] / max_k if len(crtit_objs) else 0
print(f"t Object {ind} = {result}")
return result

相关内容

  • 没有找到相关文章

最新更新