Юлия: логические сравнения с массивами

У меня простой вопрос о булевых сравнениях в Джулии. Как мне перевести следующий код Matlab на Джулию?

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)

Я попробовал следующее в Юлии:

# 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

2 ответа

Решение

Это вопрос приоритета оператора. & имеет более высокий приоритет в Юлии, чем в Matlab. Просто сдвиньте круглые скобки:

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

Для получения более подробной информации смотрите Заметные отличия от Matlab в руководстве (и другие отличия также стоит прочитать).

Обратите внимание, что вы можете использовать тот же синтаксис создания массива в Julia:

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

Вы также можете использовать find получить список полученных индексов:

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

julia> find(test)
1-element Array{Int64,1}:
3
Другие вопросы по тегам