Si consideri il seguente codiceCome posso scrivere codice per lavorare con le matrici 1D in Julia?
function test(m,B)
@show typeof(B)
all_u = rand(m,10)
one_u = all_u[:,1]
B*one_u
end
# Works
@show test(3, [1 1 1; 2 2 2])
# Works
@show test(2, [1 1; 2 2])
# Fails
@show test(1, [1; 2])
L'ultima riga non riesce con
`*` has no method matching *(::Array{Int64,1}, ::Array{Float64,1})
perché B
è ora un vettore 1-D (che non è OK), e così è one_u
(che è sempre il caso, e non causa problemi).
Come posso scrivere test(m,B)
per gestire il caso m==1
che non richiede in realtà speciale involucro per m==1
(vale a dire utilizzando un if
)? So che per il caso m==1
posso effettivamente scrivere un altro metodo di spedizione sul fatto che lo B
è un Vector
ma sembra terribilmente dispendioso.
La tua domanda mi ricorda http://stackoverflow.com/questions/27153924/prevent-julia-from-automatically-converting-the-type-of-a-1d-matrix-slice .. Sarebbe 'one_u = all_u [:, 1: 1]' non fare il trucco? – Jubobs
Se hai due array 1d e stai cercando il prodotto scalare, allora uso la funzione 'punto' (come in' punto (B, one_u) '). – spencerlyon2
Jubobs che sembra molto simile, indagherò. spencerlyon2 Non so se ho due array 1D, dato che B è talvolta una matrice, a volte una matrice vettoriale/1D - questo è il problema. – IainDunning