Хороший вопрос. Короче говоря, это потому, что мы рассматриваем массивы как не только наборы значений, но и сами математические величины. Хорошим примером является то, как вы можете умножить две матрицы с помощью матричного или поэлементного умножения:
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