arrays - conj() 函数在数组上的行为

标签 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)

最佳答案

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

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/

相关文章:

java - main 中的 Arrays.sort() 错误

c - 编写一个程序来交换数组中的值

arrays - 在 Julia 中将字符串数组解析为对象

julia - 为什么十六进制或二进制数的类型是 Uint64 而十进制数的类型是 Int64?

c++ - 如何从两个 vector (实数和虚数)中获取复数 vector

c - 为什么 clang 说 _Imaginary_I 没有声明?

php - 重置 MySqli 指针?

reflection - 如何获取字段的值

matlab - MATLAB中的复杂倒谱变换

c++ - 如何在 C++ 中传递和检索 char 数组