Я пытаюсь использовать оператор транспонирования над вектором, чтобы выполнить поэлементное сложение. Например, я хочу добавить вектор-столбец a = [a1;a2;a3]
к вектору-строке b = [b1,b2]
Я должен получить матрицу M = a+b = [a1+b1, a1+b2; a2+b1, a2+b2; a3+b1, a3+b2]
. В MATLAB это эквивалентно (если оба вектора являются векторными строками) M = a.'+b
Я пытаюсь получить то же самое в Юлии, но вот проблема, в Юлии нет оператора .'
, начиная с версии 1.0 , Есть оператор транспонирования, который не работает в режиме вещания. Оператор присоединения для меня недопустим, потому что я работаю с комплексными числами.
a = Vector{ComplexF64}([1+3im,2])
b = Vector{ComplexF64}([0,0,0])
Z = zeros(ComplexF64,3,2)
G = zeros(ComplexF64,3,2)
@. Z = b + a' # Works but takes the complex conjugate
@. Z = b + transpose(a) # DOES NOT WORK!!!! The error is " DimensionMismatch("array could not be broadcast to match destination") "
Z = b .+ transpose(a) # Works but not efficient
@. Z = b + conj(a')
Третий случай Z = b .+ transpose(a)
неэффективен, потому что он делает два цикла первым для сложения b .+ transpose(a)
, чем он запускает второй l oop один для присвоения b .+ transpose(a)
Z
. В то время как другие 3 случая делают это в течение одного l oop. Так какой же самый быстрый способ? И почему транспонирование не в трансляции?
Заранее спасибо