2015-09-17 25 views
5

Tôi có một câu hỏi đơn giản về so sánh boolean trong Julia. Làm cách nào để dịch mã Matlab sau sang Julia?Julia: so sánh boolean với mảng

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) 

Tôi đã thử những điều sau đây 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 

Trả lời

5

Đó là một vấn đề ưu tiên điều hành. & có ưu tiên cao hơn ở Julia so với ở Matlab. Chỉ cần thay đổi xung quanh ngoặc của bạn:

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

Xem Noteworthy differences from Matlab trong cuốn hướng dẫn để biết thêm chi tiết (và nó có giá trị đọc qua những khác biệt khác nữa).

1

Lưu ý rằng bạn có thể sử dụng cú pháp tương tự mảng sáng tạo trong Julia:

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

Bạn cũng có thể sử dụng find để có được một danh sách các chỉ số kết quả:

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

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