数组中conj()函数的行为

时间:2019-04-04 14:16:28

标签: arrays julia complex-numbers

当前使用的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)

1 个答案:

答案 0 :(得分:3)

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

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