Поведение функции coe () на массивах - PullRequest
2 голосов
/ 04 апреля 2019

Текущая используемая версия Julia - 1.1.

У меня проблемы с пониманием того, почему применение функции ConE () к сложному массиву не приводит к ошибке. (Насколько я понимаю, он должен работать только на скалярах). То же самое верно для функций real () и imag ().

В настоящее время я изучаю Джулию и пытаюсь понять, является ли это несоответствием в синтаксисе языка или недоразумением с моей стороны.

ek = exp.(collect(range(0, length=10, stop=pi))*im)
ek_t = conj(ek)

Это не приводит к ошибке и дает мне правильное комплексное сопряжение. Я ожидал, что будет работать только следующий фрагмент кода (который также работает):

ek_t = conj.(ek)

1 Ответ

3 голосов
/ 04 апреля 2019

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

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

...