Ваш код Matlab не работает. A
- это просто вектор-строка (матрица 1x9), поэтому при попытке сделать A(inds, :)
вы получите ошибку:
>> Anew= A(inds,:)
Index in position 1 exceeds array bounds
(must not exceed 1).
Но если вы просто исправите это, вы можете решить проблему одинаково в Matlab и Julia, используя либо логические, либо обычные индексы:
Matlab (на этот раз я проверяю, что это матрица):
n = 9;
temp = (1:n).';
A = temp * (1:4);
inds = mod(temp,2) == 0;
>> A(inds, :) % using logical indices
ans =
2 4 6 8
4 8 12 16
6 12 18 24
8 16 24 32
>> A(find(inds), :) % using regular indices
ans =
2 4 6 8
4 8 12 16
6 12 18 24
8 16 24 32
А теперь, Юля:
n = 9;
temp = 1:n;
A = temp .* (1:4)'; # notice that we're transposing the opposite vector from Matlab
inds = mod.(temp, 2) .== 0; # you can use iseven.(temp) instead
julia> A[inds, :] # logical indices (BitArray)
4×4 Array{Int64,2}:
2 4 6 8
4 8 12 16
6 12 18 24
8 16 24 32
julia> A[findall(inds), :] # regular integer indices
4×4 Array{Int64,2}:
2 4 6 8
4 8 12 16
6 12 18 24
8 16 24 32
В этом случае я бы использовал логические индексы как у Джулии, так и у Матлаба. Фактически, линтер Matlab (в редакторе) скажет, что вы должны использовать здесь логические индексы, потому что это быстрее. Однако в Джулии могут быть случаи, когда более эффективно использовать inds = findall(iseven, temp)
и просто пропустить логический BitArray, как говорит @hckr.