2017-09-25 3 views
0

Je voudrais vérifier si les éléments d'un vecteur sont contenus dans un autre vecteur. En R il y a l'opérateur %in%.Julia: Vérifie si les éléments d'un vecteur sont dans un autre vecteur

Par exemple, l'opérateur aurait procédez comme suit:

[1,3,5,7,9,4] %in% [1,2,4,5,8,9,10,11] 
# [true,false,true,false,true,true] 

Je peux facilement écrire mon propre que j'essaie de ne pas réinventer la roue.

Répondre

1

Il y a un certain nombre de built-ins qui font quelque chose de similaire. indexin vous donne les indices dans b où les éléments de a sont trouvés (0 s'il n'y est pas - cela est similaire à R match). setdiff vous donne les éléments dans a qui ne sont pas dans b. Il est probable que vous serez en mesure de faire ce que vous voulez avec ces - construire des tableaux booléens temporaires pour le filtrage n'est pas si idéomatique en julia comme en R, car il crée généralement une allocation supplémentaire, inutile.

2

Probablement pas si gentil, mais vous pouvez faire:

julia> [1,3,5,7,9,4] .∈ [[1,2,4,5,8,9,10,11]] 
6-element BitArray{1}: 
    true 
false 
    true 
false 
    true 
    true 
+0

Huh, astuce de diffusion avec les supports supplémentaires pour étendre le second tableau comme un élément! –

1

Vous pouvez utiliser une fonction anonyme: map(x -> x in [1,2,4,5,8,9,10,11] ,[1,3,5,7,9,4])
Ou une compréhension: [x in [1,2,4,5,8,9,10,11] for x = [1,3,5,7,9,4]]