什么是宏@。来自 Julia,文档在哪里?
What is the macro @. from Julia, and where is the documentation?
我似乎无法找到此宏 @.
或 .
本身的定义。我知道这是一个元素操作。但是,如何才能发挥最大的作用,对我来说还是个秘密。
例如,JavaScript 有 foreach(i,e){},您可以在其中使用 (i)index 和 (e)lement 等。
如果您不知道如何在 Julia 中做某事,第一步是输入:?
,然后输入您的命令。在这种情况下,您会得到:
help?> @.
@. expr
Convert every function call or operator in expr into a "dot call" (e.g. convert f(x) to f.(x)), and convert every assignment in expr to a "dot assignment" (e.g. convert += to .+=).
If you want to avoid adding dots for selected function calls in expr, splice those function calls in with $. For example, @. sqrt(abs($sort(x))) is equivalent to sqrt.(abs.(sort(x))) (no dot for sort).
(@. is equivalent to a call to @__dot__.)
Examples
≡≡≡≡≡≡≡≡≡≡
julia> x = 1.0:3.0; y = similar(x);
julia> @. y = x + 3 * sin(x)
3-element Vector{Float64}:
3.5244129544236893
4.727892280477045
3.4233600241796016
由于这是一个宏,有时使用 @macroexpand
:
更容易理解
julia> @macroexpand @. y = x + 3 * sin(x)
:(y .= (+).(x, (*).(3, sin.(x))))
虽然这是使用运算符的函数表示法(波兰语表示法)(即 a+b
写为 +(a,b)
)——否则很清楚发生了什么!只需在各处添加一个点,现在您的代码已矢量化。
我似乎无法找到此宏 @.
或 .
本身的定义。我知道这是一个元素操作。但是,如何才能发挥最大的作用,对我来说还是个秘密。
例如,JavaScript 有 foreach(i,e){},您可以在其中使用 (i)index 和 (e)lement 等。
如果您不知道如何在 Julia 中做某事,第一步是输入:?
,然后输入您的命令。在这种情况下,您会得到:
help?> @.
@. expr
Convert every function call or operator in expr into a "dot call" (e.g. convert f(x) to f.(x)), and convert every assignment in expr to a "dot assignment" (e.g. convert += to .+=).
If you want to avoid adding dots for selected function calls in expr, splice those function calls in with $. For example, @. sqrt(abs($sort(x))) is equivalent to sqrt.(abs.(sort(x))) (no dot for sort).
(@. is equivalent to a call to @__dot__.)
Examples
≡≡≡≡≡≡≡≡≡≡
julia> x = 1.0:3.0; y = similar(x);
julia> @. y = x + 3 * sin(x)
3-element Vector{Float64}:
3.5244129544236893
4.727892280477045
3.4233600241796016
由于这是一个宏,有时使用 @macroexpand
:
julia> @macroexpand @. y = x + 3 * sin(x)
:(y .= (+).(x, (*).(3, sin.(x))))
虽然这是使用运算符的函数表示法(波兰语表示法)(即 a+b
写为 +(a,b)
)——否则很清楚发生了什么!只需在各处添加一个点,现在您的代码已矢量化。