gpt4 book ai didi

python - 为什么 numpy 的 where 操作比 apply 函数快?

转载 作者:太空狗 更新时间:2023-10-30 02:51:22 26 4
gpt4 key购买 nike

在根据某些条件在 pandas dataframe 中创建新列时,numpy 的 where 方法在执行时间方面优于 apply 方法,为什么会这样?

例如:

df["log2FC"] = df.apply(lambda x: np.log2(x["C2Mean"]/x["C1Mean"]) if x["C1Mean"]> 0 else np.log2(x["C2Mean"]), axis=1)

df["log2FC"] = np.where(df["C1Mean"]==0,
np.log2(df["C2Mean"]),
np.log2(df["C2Mean"]/df["C1Mean"]))

最佳答案

apply 的调用是逐行迭代:

df["log2FC"] = df.apply(lambda x: np.log2(x["C2Mean"]/x["C1Mean"]) if x["C1Mean"]> 0 else np.log2(x["C2Mean"]), axis=1)

apply 只是循环的语法糖,你传递了 axis=1 所以它是按行的。

你的其他片段

df["log2FC"] = np.where(df["C1Mean"]==0,
np.log2(df["C2Mean"]),
np.log2(df["C2Mean"]/df["C1Mean"]))

作用于整个列,因此它是矢量化的。

另一件事是 pandasnumpy 执行更多的检查、索引对齐等。

在传递标量值时,您对 np.log2 的调用在此上下文中毫无意义:

 np.log2(x["C2Mean"]/x["C1Mean"])

性能方面,它与调用 math.log2

相同

解释为什么 numpy 明显更快或什么是矢量化超出了这个问题的范围。你可以看到这个:What is vectorization? .

这里的本质是 numpy 可以并且将会使用用 C 或 Fortran 编写的外部库,它们本质上比 python 更快。

关于python - 为什么 numpy 的 where 操作比 apply 函数快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56109846/

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