Как положить четные числа из матрицы в отдельный вектор в Юлии? - PullRequest
4 голосов
/ 27 октября 2019

Я решаю некоторые матричные проблемы в Юлии, и мне нужно поместить числа, которые можно разделить на 2 (или любое другое число) из матрицы в отдельном векторе. Обычно, когда мне нужно отделить числа от матрицы, которые можно разделить на 2, 3 или 4 ... и т. Д., Я не могу правильно их проиндексировать. По сути, мне нужен эквивалент Джулии для команды Matlab:

vector=matrix(rem(matrix,2)==0)

.

Я пробовал несколько вещей, упомянутых ниже:

vector=matrix[matrix.%2==0];

vector=(matrix.%2==0);

Я ожидаю, что вывод будет вектором чиселэто можно разделить на определенное число, но в первом случае я получаю ошибки, а во втором я получаю только «true» или «false».

Это мой первый пост, так что извините, если я сделал какие-либо ошибки или сломал какую-либоправила. Заранее спасибо!

1 Ответ

6 голосов
/ 27 октября 2019

Прежде всего, добро пожаловать в stackoverflow!

Один из способов получить то, что вы хотите, что вы почти получили право, заключается в следующем:

julia> M = rand(1:10, 3,3)
3×3 Array{Int64,2}:
 3  10  7
 6   7  8
 2  10  6

julia> v = M[M .% 2 .== 0]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6

Обратите внимание на дополнительную точку в .==, который применяет сравнение равенства поэлементно.

Более быстрая версия будет использовать findall:

julia> M[findall(x->x%2==0, M)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6

Здесь x->x%2==0 - анонимная функцияпредставляющий критерий поиска. В особом случае x%2==0 это может быть просто заменено на iseven:

julia> M[findall(iseven, M)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6

. Вы также можете использовать массивы , чтобы получить то, что вы хотите, что должно бытьеще быстрее:

julia> [x for x in M if iseven(x)]
6-element Array{Int64,1}:
  6
  2
 10
 10
  8
  6

Наконец, возможно, самый нелепый вариант - использовать filter:

julia> filter(iseven, M)  
6-element Array{Int64,1}: 
  6                       
  2                       
 10                       
 10                       
  8                       
  6                       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...