Étant donné une liste de nombres à virgule flottante, standardisez-la .
Détails
- Une liste est normalisée si la moyenne de toutes les valeurs est 0, et l' écart-type est 1. Une façon de calculer cela est en calculant d'abord la moyenne et l'écart-type comme
puis calcul de la normalisation en remplaçant chaquepar .
- Vous pouvez supposer que l'entrée contient au moins deux entrées distinctes (ce qui implique ).
- Notez que certaines implémentations utilisent l'écart type d'échantillon, qui n'est pas égal à l'écart type de population nous utilisons ici.
- Il existe une réponse CW pour toutes les solutions triviales .
Exemples
[1,2,3] -> [-1.224744871391589,0.0,1.224744871391589]
[1,2] -> [-1,1]
[-3,1,4,1,5] -> [-1.6428571428571428,-0.21428571428571433,0.8571428571428572,-0.21428571428571433,1.2142857142857144]
(Ces exemples ont été générés avec ce script .)
CW pour toutes les entrées triviales
Python 3 + scipy, 31 octets
Essayez-le en ligne!
Octave / MATLAB, 15 octets
Essayez-le en ligne!
la source
APL (Dyalog Classic) ,
212019 octetsEssayez-le en ligne!
⊢÷⌹
est la somme des carrés⊢÷⌹×≢
est la somme des carrés divisée par la longueurla source
MATL , 10 octets
Essayez-le en ligne!
Explication
la source
APL + WIN,
41,3230 octets9 octets économisés grâce à Erik + 2 de plus grâce à ngn
Demande le vecteur de nombres et calcule l'écart type moyen et les éléments normalisés du vecteur d'entrée
la source
x←v-(+/v)÷⍴v←⎕
et ensuite fairex÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? si oui, vous pouvez réécrire(+/x*2)÷⍴v
comme+/x×x÷⍴v
R + pryr,
5352 octets-1 octet utilisant
sum(x|1)
au lieu delength(x)
comme vu dans la solution de @Robert S.Pour être un langage construit pour les statisticiens, je suis étonné que cela n'ait pas de fonction intégrée. Du moins pas une que j'ai pu trouver. Même la fonction
mosaic::zscore
ne donne pas les résultats escomptés. Cela est probablement dû à l'utilisation de l'écart type de la population au lieu de l'écart type de l'échantillon.Essayez-le en ligne!
la source
<-
en a=
pour économiser 1 octet.scale
est bien!n
qu'une seule fois que vous pouvez l'utiliser directement pendant 38 octetsTcl , 126 octets
Essayez-le en ligne!
la source
Gelée , 10 octets
Essayez-le en ligne!
Ce n'est pas plus court, mais la fonction déterminante de Jelly
ÆḊ
calcule également la norme vectorielle.la source
Mathematica, 25 octets
Fonction pure. Prend une liste de nombres en entrée et renvoie une liste de nombres de précision machine en sortie. Notez que la
Standardize
fonction intégrée utilise la variance d'échantillon par défaut.la source
J , 22 octets
-1 octet grâce au charlatan des vaches!
Essayez-le en ligne!
J ,
3123 octetsEssayez-le en ligne!
la source
[:(%[:%:1#.*:%#)]-+/%#
tio.run/##y/qfVmyrp2CgYKVg8D/… , je pense que l'un de ces plafonds pourrait être supprimé, mais n'a pas eu de chance jusqu'à présent, EDIT: un byteshaving plus direct est(-%[:%:1#.-*-%#@[)+/%#
également au 22APL (Dyalog Unicode) ,
3329 octets-4 octets grâce à @ngn
Essayez-le en ligne!
la source
⍵-m
à une variable et supprimerm←
comme ceci:{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 octetsMerci à @flawr pour les suggestions à utiliser
sum(1<$x)
au lieu desum[1|_<-x]
et pour aligner la moyenne, @xnor pour avoir inclus l'écart type et d'autres réductions.Étendu:
la source
[1|_<-x]
par(1<$x)
pour économiser quelques octets. C'est une excellente astuce pour éviter lefromIntegral
, que je n'ai pas vu jusqu'à présent!m
.(-x+)
pour(+(-x))
éviter les parens. Ilf
peut également sembler être sans point:f=(/sum(1<$x))
ets
peut être remplacé par sa définition.(-x+)
c'est pratique, je suis sûr que je vais l'utiliser à l'avenirMathGolf , 7 octets
Essayez-le en ligne!
Explication
Il s'agit littéralement d'une recréation octet par octet de la réponse 05AB1E de Kevin Cruijssen, mais j'économise quelques octets de MathGolf ayant 1 octet pour tout ce qui est nécessaire pour ce défi. De plus, la réponse semble assez bonne à mon avis!
la source
JavaScript (ES7),
8079 octetsEssayez-le en ligne!
Commenté
la source
Python 3 + numpy , 46 octets
Essayez-le en ligne!
la source
Haskell , 59 octets
Essayez-le en ligne!
N'utilise pas de bibliothèques.
La fonction d'assistance
%
calcule la somme desi
puissances d'une liste, ce qui nous permet d'obtenir trois valeurs utiles.0%l
est la longueur del
(appelez celan
)1%l
est la somme del
(appelez celas
)2%l
est la somme des carrés del
(appelez celam
)Nous pouvons exprimer le z-score d'un élément
y
comme(C'est l'expression
(y-s/n)/sqrt(v/n-(s/n)^2)
simplifiée un peu en multipliant le haut et le bas parn
.)Nous pouvons insérer les expressions
0%l
,1%l
,2%l
sans parens parce que%
nous définissons a une priorité plus élevée que les opérateurs arithmétiques.(%)i=sum.map(^i)
est de la même longueur quei%l=sum.map(^i)l
. Le rendre plus sans points n'aide pas. Le définir commeg i=...
perd des octets lorsque nous l'appelons. Bien que cela%
fonctionne pour n'importe quelle liste mais que nous l'appelons uniquement avec la liste d'entrée de problème, il n'y a pas de perte d'octet en l'appelant àl
chaque fois avec un argument car un appel à deux argumentsi%l
n'est pas plus long qu'un appel à un argumentg i
.la source
%
idée! Cela ressemble à la version discrète des moments statistiques .K (oK) ,
3323 octets-10 octets grâce à ngn!
Essayez-le en ligne!
Première tentative de codage (je n'ose pas le nommer "golf") en K. Je suis sûr que cela peut être fait beaucoup mieux (trop de noms de variables ici ...)
la source
(x-m)
part
( tio ){
}
n'est pas nécessaire - son nom de paramètre implicite estx
et il a été passé unx
argument as ( tio )x-+/x
parx-/x
. l'argument gauche-/
sert de valeur initiale pour la réduction ( tio )MATLAB, 26 octets
Trivial-ish,
std(,1)
pour utiliser l'écart-type de la populationla source
TI-Basic (série 83),
1411 octetsPrend entrée
Ans
. Par exemple, si vous saisissez ce qui précèdeprgmSTANDARD
, alors{1,2,3}:prgmSTANDARD
reviendra{-1.224744871,0.0,1.224744871}
.Auparavant, j'essayais d'utiliser la
1-Var Stats
commande, qui stocke l'écart-type de la populationσx
, mais il est moins difficile de le calculer manuellement.la source
05AB1E , 9 octets
Port de la réponse JavaScript de @Arnauld , alors assurez-vous de voter pour lui!
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Gelée , 10 octets
Essayez-le en ligne!
la source
Pyth,
2119 octetsEssayez-le en ligne ici .
Edit: après avoir vu la réponse de Kevin , a changé pour utiliser la moyenne intégrée pour les résultats internes. Réponse précédente:
mc-dJ.OQ@csm^-Jk2QlQ2
la source
SNOBOL4 (CSNOBOL4) , 229 octets
Essayez-le en ligne!
Le lien est vers une version fonctionnelle du code qui construit un tableau à partir de STDIN compte tenu de sa longueur puis de ses éléments, puis exécute la fonction
Z
sur cela et finalement affiche les valeurs.Définit une fonction
Z
qui renvoie un tableau.La
1.
ligne 4 est nécessaire pour effectuer correctement l'arithmétique en virgule flottante.la source
Julia 0,7 , 37 octets
Essayez-le en ligne!
la source
Fusain ,
2519 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Calculerμ et vectorisé le soustraire de chaque Xje .
Calculerσ , vectorisé diviser chacun Xje par elle, et sortir le résultat.
Edit: 6 octets enregistrés grâce à @ ASCII uniquement pour a) utiliser
SquareRoot()
au lieu dePower(0.5)
b) fixer vectoriséDivide()
(il le faisait à laIntDivide()
place) c) fairePower()
vectoriser.la source