2015-09-17 13 views
5

Ho una semplice domanda sui confronti booleani in Julia. Come posso tradurre il seguente codice Matlab in Julia?Julia: confronti booleani con le matrici

Matlab:

% create parameters 
o = -3; 
mat = [65 -4; 65 -3; 65 -2] 

% determine which rows of matrix have column 2 less than o AND column 1 equal to 65. 
result = (o < mat(:,2) & mat(:,1) == 65) 

Ho provato quanto segue in Julia:

# create parameters 
o = -3 
mat = zeros(3,2) 
mat[:,1] = 65 
mat[1,2] = -4 
mat[2,2] = -3 
mat[3,2] = -2 
mat 

# attempt to create desired result 
o .< mat[:,2]        # this part works 
mat[:,1] .== 65        # this part works 
test = (o .< mat[:,2] && mat[:,1] .== 65) # doesn't work 
test = (o .< mat[:,2] .& mat[:,1] .== 65) # doesn't work 
test = (o .< mat[:,2] & mat[:,1] .== 65)  # doesn't work 

risposta

5

E 'una questione di precedenza degli operatori. & ha una precedenza più alta in Julia rispetto a Matlab. Basta cambiare intorno le parentesi:

test = (o .< mat[:,2]) & (mat[:,1] .== 65) 

Vedi Noteworthy differences from Matlab nel manuale per maggiori dettagli (e vale la pena leggere attraverso le altre differenze, anche).

1

noti che è possibile utilizzare la stessa sintassi creazione array in Julia:

julia> mat = [65 -4; 65 -3; 65 -2] 
3x2 Array{Int64,2}: 
65 -4 
65 -3 
65 -2 

È inoltre possibile utilizzare find per ottenere una lista degli indici risultanti:

o = -3 
test = (o .< mat[:,2]) & (mat[:,1] .== 65) 

julia> find(test) 
1-element Array{Int64,1}: 
3