【发布时间】:2016-03-16 11:20:48
【问题描述】:
为了以下想法,我在 Numpy 中对测试进行矢量化:执行 elementwise 一些测试并根据测试选择 expr1 或 expr2。这就像 C 中的 三元运算符:test?expr1:expr2
我看到了两种主要的执行方式;我想知道是否有充分的理由选择一个而不是另一个;也许还有其他技巧可用,我很高兴知道它们。主要目标是速度;出于这个原因,我不想将np.vectorize 与if-else 语句一起使用。
对于我的例子,我将重新构建min 函数;请不要告诉我一些用于计算的 Numpy 函数;这只是一个例子!
想法1:在乘法中使用布尔值的算术值:
# a and b have similar shape
test = a < b
ntest = np.logical_not(test)
out = test*a + ntest*b
想法 2:或多或少遵循 APL/J 编码风格(通过使用条件表达式作为比初始数组多一维的数组的索引)。
# a and b have similar shape
np.choose(a<b, np.array([b,a]))
【问题讨论】:
标签: python numpy conditional ternary-operator