数组上 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
当前使用的 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