数组上 conj() 函数的行为

Behaviour of the conj() function on arrays

当前使用的 Julia 版本是 1.1。

我无法理解为什么将 conj() 函数应用于复杂数组不会产生错误。 (据我所知,它只适用于标量)。 real() 和 imag() 函数也是如此。

我目前正在学习 Julia 并尝试了解这是语言语法的不一致还是我的误解。

ek = exp.(collect(range(0, length=10, stop=pi))*im)
ek_t = conj(ek)

这不会产生错误,并给出了正确的复变位。我原以为只有以下代码可以工作(也可以工作):

ek_t = conj.(ek)

好问题。简而言之,这是因为我们不仅将数组视为值的集合,而且将其本身视为数学量。一个很好的例子是如何将两个矩阵与矩阵或逐元素乘法相乘:

julia> A, B = [1 2; 3 4], [10 20; 30 40]
([1 2; 3 4], [10 20; 30 40])

julia> A * B
2×2 Array{Int64,2}:
  70  100
 150  220

julia> A .* B
2×2 Array{Int64,2}:
 10   40
 90  160

就像矩阵可以像数学量一样相乘一样,矩阵本身也可以共轭。碰巧答案与逐元素计算相同,但同样有效。如果 conj.(...) 可以与其他点操作融合,您将看到使用 conj.(...) 的一些优势。

这里的一个很好的消息来源是数学教授,他反对我们弃用这些函数以及许多其他弃用的尝试:https://github.com/JuliaLang/julia/pull/18495#issuecomment-267215901