子函数的域不同时Julia中的分段函数

子函数的域不同时Julia中的分段函数,julia,Julia,假设我有一个分段函数foo(x),如果x为0,它等于x。此函数接受向量作为参数。因此,我尝试了以下方法: function foo(x) (x .<= 0) .* x + (x .> 0) .* log(x) end 函数foo(x) (x.0)。*日志(x) 结束 显然,当x

假设我有一个分段函数foo(x),如果x为0,它等于x。此函数接受向量作为参数。因此,我尝试了以下方法:

function foo(x)
    (x .<= 0) .* x + (x .> 0) .* log(x)
end
函数foo(x) (x.0)。*日志(x) 结束 显然,当x<0时,这不起作用,因为它试图计算所有内容(即使它将乘以0。有更好的方法吗


谢谢!

我想这是您可以尝试的:

foo(x) = x > 0 ? log(x) : x
它假定
x
是一个标量


然后,如果
v
是一个向量,当你使用它时,只需像这样播放它
foo.(v)

谢谢!我在某个地方读到Julia优化了东西,所以播放不会比矢量化函数花费太多时间。尝试了你建议的我的函数(与此不同),并且矢量化速度快了5倍。最后做了:
tmp[x 0])
。您使用的是哪个版本的Julia?在当前版本的Julia上,此代码不运行。我猜您的代码中缺少了一些点(在比较运算符之前和
log
之后)。我已经将它与我建议的
foo.(v)
进行了基准测试,在Julia的当前版本中,速度似乎慢了两倍。对不起,是的,应该有点。仔细检查后,广播似乎给出了一致的性能(0.06秒),而我的版本可能在0.05秒到0.2秒之间。谢谢!