Transmitindo vetores e matrizes em Julia

SeSodesa:

Eu gostaria de usar uma versão pontilhada de uma função escalar a valores calcular para toda uma matriz de entradas. A função é definida como se segue:

function SpecificCharge(U, r, B)
 ( 2 * U ) / ( r^2 * B^2 )
end

e eu gostaria de dar-lhe as seguintes entradas:

const Us = [ # voltages U
  228.9, 243, 257, 271, 285, 300
]

const Rs = [ # radii r
  9 7 5.8 5 4.3 3.9;
  10.5 8.1 6.7 5.7 4.9 4.5;
  10.1 8.3 7.1 6.5 6 4.8;
  11.1 9.0 7.2 6.5 5.6 5.1;
  10.5 8.3 7.8 6.5 5.7 5.4;
  11.9 8.9 8.0 7.4 6.2 5.5
]

const Bs = [ # flux densities B
  0.0007332339999999999, 0.00089328, 0.0010421599999999999, 0.00119104, 0.00133992, 0.0014873112
]

# Calling the dotted version of the function
specific_charges = SpecificCharge.(Us, Rs, Bs)

O resultado deve ser uma matriz de mesmas dimensões que Rs, com cada raio passa a ter a carga específica correspondente, dada por SpecificCharge. Existe uma densidade de fluxo que corresponde a cada um U- Bpar, e as linhas Rscorrespondem a tensões Ue colunas para densidades de fluxo B.

O problema é, eu não sei como difusão das obras em Julia. Será que a função de SpecificCharge.trabalho como é, se eu simplesmente transpor os vetores Use Bsde forma adequada, ou que eu preciso para complicar a própria função para fazer este trabalho?

fredrikekre:

Faz a função SpecificCharge. trabalho como é, se eu simplesmente transpor os vetores Use Bsde forma adequada, ou que eu preciso para complicar a própria função para fazer este trabalho?

Você tentou isso? Ele funciona como escrita, no entanto, eu estou supondo que você quer transpor quer Usou Bspara obter o correto "acoplamento".


Quando você usa transmissão com diferentes dimensões da matriz (vetores e matrizes no seu exemplo) Julia vai "estender" matrizes nas dimensões únicas. Por exemplo, um vector vai ser alargada a uma matriz com uma cópia do vector em cada coluna. Aqui está um exemplo para ilustrar este

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"

Como você pode ver, o vector Afoi estendido na dimensão singleton para

julia> A2 = [A A A]
2×3 Array{String,2}:
 "A1"  "A1"  "A1"
 "A2"  "A2"  "A2"

de tal modo que tem o mesmo tamanho B, e, em seguida, fé aplicada a cada par. Para estender um vetor na outra dimensão que você precisa para permutar-lo;

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"

e agora Cfoi estendida na primeira dimensão (dimensão Singleton), essencialmente

julia> C2 = [permutedims(C); permutedims(C); permutedims(C)]
3×3 Array{String,2}:
 "C1"  "C2"  "C3"
 "C1"  "C2"  "C3"
 "C1"  "C2"  "C3"

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=391769&siteId=1
Recomendado
Clasificación