2015-03-20 13 views
10

Diciamo che ho un Array variabile chiamata p:Come devo convertire un array singleton in uno scalare?

julia> p = [5] 
julia> typeof(p) 
Array{Int64,1} 

Come dovrei convertirlo in SCALARE? p può anche essere 2-dimensionale:

julia> p = [1]'' 
julia> typeof(p) 
Array{Int64,2} 

(Nota: il doppio trasposizione trucco per aumentare dimentionality might not work in future versions of Julia)

Attraverso la manipolazione del caso, posso fare p di qualsiasi dimensione, ma come ho dovrebbe ridurlo a uno scalare?


Un approccio possibile è p=p[1], ma che non getterà alcun errore se p ha più di un elemento in p; quindi, non mi va bene. ho potuto costruire la mia propria funzione (con il controllo),

function scalar(x) 
    assert(length(x) == 1) 
    x[1] 
end 

ma sembra che si deve reinventare la ruota.

Ciò che non funziona è squeeze, che rimuove semplicemente le dimensioni fino a p è un array a dimensione zero.

(legate alla Julia: convert 1x1 array from inner product to number, ma, in questo caso, il funzionamento-agnostico.)

risposta

7

Se si desidera ottenere lo scalare, ma genera un errore se la matrice è la forma sbagliata, si potrebbe reshape:

julia> p1 = [4]; p2 = [5]''; p0 = []; p3 = [6,7]; 

julia> reshape(p1, 1)[1] 
4 

julia> reshape(p2, 1)[1] 
5 

julia> reshape(p0, 1)[1] 
ERROR: DimensionMismatch("new dimensions (1,) must be consistent with array size 0") 
in reshape at array.jl:122 
in reshape at abstractarray.jl:183 

julia> reshape(p3, 1)[1] 
ERROR: DimensionMismatch("new dimensions (1,) must be consistent with array size 2") 
in reshape at array.jl:122 
in reshape at abstractarray.jl:183 
Problemi correlati