Bud*_*iLW 2 documentation macros julia
我似乎无法找到这个宏的定义@.或其.本身。我知道这是一个元素运算。但如何才能将它发挥到极致,对我来说仍然是个秘密。
例如,JavaScript 有 foreach(i,e){},您可以在其中使用 (i) 索引和 (e) 元素等。
当您不知道如何在 Julia 中执行某些操作时,第一步是输入:,?然后输入您的命令。在这种情况下你会得到:
help?> @.\n @. expr\n\n 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 .+=).\n\n 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).\n\n (@. is equivalent to a call to @__dot__.)\n\n Examples\n \xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\xe2\x89\xa1\n\n julia> x = 1.0:3.0; y = similar(x);\n\n julia> @. y = x + 3 * sin(x)\n 3-element Vector{Float64}:\n 3.5244129544236893\n 4.727892280477045\n 3.4233600241796016\nRun Code Online (Sandbox Code Playgroud)\n由于这是一个宏,有时使用以下命令更容易理解@macroexpand:
julia> @macroexpand @. y = x + 3 * sin(x)\n:(y .= (+).(x, (*).(3, sin.(x))))\nRun Code Online (Sandbox Code Playgroud)\n虽然这是使用运算符的函数表示(波兰语表示法)(即a+b写为+(a,b)) - 否则很清楚发生了什么!只需在各处添加一个点,现在您的代码就已矢量化。