当前使用的 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.(...)
的一些优势。
这里的一个很好的来源是数学教授,他反对我们尝试弃用这些函数以及许多其他弃用:https://github.com/JuliaLang/julia/pull/18495#issuecomment-267215901
关于arrays - conj() 函数在数组上的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55518204/