- suppress item permet de supprimer les éléments d'un array of real dont les positions sont connues.
set b to {0.0, 1.0, 10.0, 11.0, 20.0, 21.0} as array of real
set c to (suppress item {2, 4, -2} from b)
c as list of real
-- {0.0, 10.0, 21.0}
suppress item autorise des index négatifs.
-
Pour supprimer des éléments d'un array of real en fonction d'une certaine condition, il faut fabriquer un masque de données et utiliser la commande maskarray. Un masque de données est un array of real (de la même taille que l'original) ne contenant que des 0 et des 1. Un masque peut être construit par exemple en appliquant une formule booléeenne à l'aide de la commande evalformula.
maskarray retire les valeurs correspondant aux valeurs 0.0 du masque.
set b to {0.0, 1.0, 10.0, 11.0, 20.0, 21.0} as array of real
set mk to evalformula "x<15" with {x:b}
set d to maskarray b with mk
d as list of real
-- {0.0, 1.0, 10.0, 11.0}
-
La commande maskarray peut être appliquée à des listes d'arrays of real, à condition qu'elles aient la même taille. Cela est équivalent à masquer les lignes d'une matrice dont les colonnes seraient les éléments de la liste d'arrays of real.
L'exemple ci-dessous utilise des masques pour effectuer des statistiques sur les espérances conditionnelles du résultat de 100 000 lancers d'une paire de dés.
|
set avs to {}
set a to randomarray 100000 range {1, 7}
set a to floor a
set b to randomarray 100000 range {1, 7}
set b to floor b
repeat with i from 1 to 6
set expr to "x==" & i & "|y==" & i
set mk to evalformula expr with {x:a, y:b}
set {am, bm} to maskarray {a, b} with mk
set c to addlist am with bm
set end of avs to mean of (statlist c)
end repeat
set cu to QuickCurve({1, 6}, avs, 0)
set cu's pattern style to 1
set cu's pattern size to 12
set cu's fill color to 4
draw cu's window
|
|