Имеет ли функция SpecificCharge
. работать как есть, если я просто транспонирую векторы Us
и Bs
соответствующим образом, или мне нужно усложнить саму функцию, чтобы сделать эту работу?
Вы пробовали это? Он работает как написано, однако, я предполагаю, что вы хотите транспонировать либо Us
, либо Bs
, чтобы получить правильную "связь".
Когда вы используете широковещательную передачу с различными размерами массива (векторы и матрицы в вашем примере) Юлия "расширит" массивы в одноэлементных измерениях. Например, вектор будет расширен до матрицы с копией вектора в каждом столбце. Вот пример, чтобы проиллюстрировать это
julia> A = ["A1", "A2"];
julia> B = ["B11" "B12" "B13";
"B21" "B22" "B23"];
julia> f(args...) = join(args, ", ");
julia> f.(A, B)
2×3 Array{String,2}:
"A1, B11" "A1, B12" "A1, B13"
"A2, B21" "A2, B22" "A2, B23"
. Как видите, вектор A
был расширен в одноэлементном измерении до
julia> A2 = [A A A]
2×3 Array{String,2}:
"A1" "A1" "A1"
"A2" "A2" "A2"
так, что он имеет тот же размер как B
, а затем f
применяется к каждой паре. Чтобы расширить вектор в другом измерении, вам нужно его переставить;
julia> C = ["C1", "C2", "C3"];
julia> f.(B, permutedims(C))
2×3 Array{String,2}:
"B11, C1" "B12, C2" "B13, C3"
"B21, C1" "B22, C2" "B23, C3"
, а теперь C
расширен в первом измерении (одноместное измерение), по существу,
julia> C2 = [permutedims(C); permutedims(C); permutedims(C)]
3×3 Array{String,2}:
"C1" "C2" "C3"
"C1" "C2" "C3"
"C1" "C2" "C3"