【发布时间】:2021-08-10 15:18:11
【问题描述】:
我想知道这两个是否等效:
import numpy as np
a = np.arange(100000) + 1
# 1
b = 10 * np.log10(a)
# 2
c = np.empty_like(a)
c = np.multiply(10, np.log10(a, out=c), out=c)
更准确地说,我想知道 numpy 是否找到了某种方法来创建数组b,而无需为日志操作的结果分配和丢弃中间数组。当然,这只对非常大的数组很重要。
【问题讨论】:
-
是的,是的。如果您在内存限制下工作时正在寻找替代方案,请考虑使用numexpr 来避免中间数组
-
只是为了澄清一下:“是的,他们这样做”是指他们确实在 #1 的情况下创建了中间数组,对吗?万一不是#2,但我想它有点难看。
-
在情况 1 中是,在情况 2 中否。
-
请注意,
np.log10(a, out=c); np.multiply(10, c, out=c)会更简洁,不会令人困惑。
标签: python performance numpy