Eine Liste von Gleitkommazahlen gegeben, Standardisieren Sie.
Einzelheiten
- Eine Liste ist standardisiert, wenn der Mittelwert aller Werte 0 und die Standardabweichung 1 ist. Eine Möglichkeit, dies zu berechnen, besteht darin, zuerst den Mittelwert und die Standardabweichung als
μ = zu berechnen 1und dann die StandardisierungBerechnung von jedem Ersetzenmit .
- Sie können davon ausgehen, dass die Eingabe mindestens zwei unterschiedliche Einträge enthält (was impliziert ).
- Beachten Sie, dass einige Implementierungen die Standardabweichung der Stichprobe verwenden, die nicht der hier verwendeten Populationsstandardabweichung .
- Für alle trivialen Lösungen gibt es eine CW-Antwort .
Beispiele
[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]
(Diese Beispiele wurden mit diesem Skript generiert .)
code-golf
math
array-manipulation
arithmetic
statistics
fehlerhaft
quelle
quelle
CW für alle trivialen Einträge
Python 3 + scipy, 31 Bytes
Probieren Sie es online!
Oktave / MATLAB, 15 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Classic) ,
21 -20 -19 BytesProbieren Sie es online!
⊢÷⌹
ist die Summe der Quadrate⊢÷⌹×≢
ist die Summe der Quadrate geteilt durch die Längequelle
MATL , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
APL + WIN,
41,3230 Bytes9 Bytes gespart dank Erik + 2 dank ngn
Fordert zur Eingabe eines Zahlenvektors auf und berechnet die mittlere Standardabweichung und standardisierte Elemente des Eingabevektors
quelle
x←v-(+/v)÷⍴v←⎕
und dann tunx÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? Wenn ja, könnte man umschreiben(+/x*2)÷⍴v
als+/x×x÷⍴v
R + Pryr,
5352 Bytes-1 Byte unter Verwendung von
sum(x|1)
anstelle vonlength(x)
@Robert S.'s LösungIch bin erstaunt, dass diese Sprache für Statistiker keine eingebaute Funktion hat. Zumindest nicht eines, das ich finden konnte. Sogar die Funktion
mosaic::zscore
liefert nicht die erwarteten Ergebnisse. Dies ist wahrscheinlich auf die Verwendung der Populationsstandardabweichung anstelle der Stichprobenstandardabweichung zurückzuführen.Probieren Sie es online!
quelle
<-
in ein ändern=
, um 1 Byte zu sparen.scale
ist ordentlich!n
einmal verwendest kannst du es direkt für 38 Bytes verwendenTcl , 126 Bytes
Probieren Sie es online!
quelle
Gelee , 10 Bytes
Probieren Sie es online!
Es ist nicht kürzer, aber Jellys Determinantenfunktion
ÆḊ
berechnet auch die Vektornorm.quelle
Mathematica, 25 Bytes
Funktion pur. Nimmt eine Liste von Zahlen als Eingabe und gibt eine Liste von Zahlen mit Maschinengenauigkeit als Ausgabe zurück. Beachten Sie, dass die integrierte
Standardize
Funktion standardmäßig die Stichprobenvarianz verwendet.quelle
J , 22 Bytes
-1 Byte dank Kühe quaken!
Probieren Sie es online!
J ,
31-23BytesProbieren Sie es online!
quelle
[:(%[:%:1#.*:%#)]-+/%#
tio.run/##y/qfVmyrp2CgYKVg8D/... , ich denke , eine dieser Kappen entfernt werden konnte, aber hatten kein Glück so weit, EDIT: ein direkterer byteshaving ist(-%[:%:1#.-*-%#@[)+/%#
auch bei 22APL (Dyalog Unicode) ,
3329 Bytes-4 Bytes dank @ngn
Probieren Sie es online!
quelle
⍵-m
einer Variablenm←
{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 BytesDanke an @flawr für die Vorschläge
sum(1<$x)
anstelle vonsum[1|_<-x]
und als Mittelwert verwendet werden sollen, @xnor für das Inlinieren der Standardabweichung und anderer Verringerungen.Erweitert:
quelle
[1|_<-x]
mit(1<$x)
ein paar Bytes zu speichern. Das ist ein toller Trick, um das zu vermeidenfromIntegral
, was ich bisher noch nicht gesehen habe!m
.(-x+)
für(+(-x))
zu vermeiden Pars. Auch sieht es aus wief
pointfree sein kann:f=(/sum(1<$x))
unds
kann mit seiner Definition ersetzt werden.(-x+)
ist praktisch, ich bin sicher, dass ich das in Zukunft verwenden werdeMathGolf , 7 Bytes
Probieren Sie es online!
Erläuterung
Dies ist buchstäblich eine byteweise Neuerstellung der 05AB1E-Antwort von Kevin Cruijssen, aber ich spare mir ein paar Bytes von MathGolf mit 1 Byte für alles, was für diese Herausforderung benötigt wird. Auch die Antwort sieht meiner Meinung nach ganz gut aus!
quelle
JavaScript (ES7),
80 bis79 ByteProbieren Sie es online!
Kommentiert
quelle
Python 3 + Anzahl , 46 Bytes
Probieren Sie es online!
quelle
Haskell , 59 Bytes
Probieren Sie es online!
Benutzt keine Bibliotheken.
Die Hilfsfunktion
%
berechnet die Summe deri
Potenzen einer Liste, wodurch wir drei nützliche Werte erhalten.0%l
ist die Längel
(dies nenntn
)1%l
die Summe wirdl
(nennen wir dieses
)2%l
ist die Summe der Quadrate vonl
(dies nenntm
)Wir können den Z-Score eines Elements
y
als ausdrücken(Dies ist der Ausdruck, der
(y-s/n)/sqrt(v/n-(s/n)^2)
durch Multiplizieren von oben und unten mit etwas vereinfacht wirdn
.)Wir können die Ausdrücke einfügen
0%l
,1%l
,2%l
ohne parens , weil die%
ich haben eine höhere Priorität als die arithmetischen Operatoren definieren.(%)i=sum.map(^i)
ist die gleiche Länge wiei%l=sum.map(^i)l
. Es hilft nicht, es sinnloser zu machen. Das Definieren wieg i=...
verliert Bytes, wenn wir es aufrufen. Funktioniert zwar%
für jede Liste, wird jedoch nur mit der Problemeingabeliste aufgerufen. Es geht jedoch kein Byte-Verlust ein,l
wenn Sie sie jedes Mal mit Argument aufrufen, da ein Aufruf mit zwei Argumenteni%l
nicht länger als ein Argument istg i
.quelle
%
Idee wirklich ! Es sieht genauso aus wie die diskrete Version der statistischen Momente .K (oK) ,
3323 Bytes-10 bytes dank ngn!
Probieren Sie es online!
Erster Codierungsversuch (ich wage es nicht, es "Golf" zu nennen) in K. Ich bin mir ziemlich sicher, dass es viel besser gemacht werden kann (zu viele Variablennamen hier ...)
quelle
(x-m)
durcht
( tio ){
}
ist unnötig - sein impliziter Parametername istx
und es wurde einx
as-Argument ( tio ) übergebenx-+/x
durchx-/x
. Das linke Argument-/
dient als Anfangswert für die Reduktion ( tio )MATLAB, 26 Bytes
Trivial
std(,1)
für die Verwendung der Populationsstandardabweichungquelle
TI-Basic (Serie 83),
1411 BytesNimmt Eingaben auf
Ans
. Wenn Sie zum Beispiel das Obige eingebenprgmSTANDARD
,{1,2,3}:prgmSTANDARD
wird zurückgegeben{-1.224744871,0.0,1.224744871}
.Früher habe ich versucht, den
1-Var Stats
Befehl zu verwenden, in dem die Populationsstandardabweichung gespeichert istσx
, aber es ist einfacher, ihn manuell zu berechnen.quelle
05AB1E , 9 Bytes
Port of @Arnauld 's JavaScript-Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Gelee , 10 Bytes
Probieren Sie es online!
quelle
Pyth,
21 bis19 BytesProbieren Sie es hier online aus .
Bearbeiten: Nachdem Kevins Antwort angezeigt wurde, wurde geändert, um den integrierten Durchschnitt für die inneren Ergebnisse zu verwenden. Vorherige Antwort:
mc-dJ.OQ@csm^-Jk2QlQ2
quelle
SNOBOL4 (CSNOBOL4) , 229 Bytes
Probieren Sie es online!
Link ist eine funktionale Version des Codes, der aus STDIN und seinen Elementen ein Array erstellt, darauf die Funktion
Z
ausführt und schließlich die Werte ausgibt .Definiert eine Funktion,
Z
die ein Array zurückgibt.Die
1.
Online-4 ist notwendig, um die Gleitkomma-Arithmetik korrekt durchzuführen.quelle
Julia 0,7 , 37 Bytes
Probieren Sie es online!
quelle
Holzkohle ,
25 bis19 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Berechnungμ und vektorisiert subtrahieren sie von jedem xich .
Berechnungσ , vektorisierte dividieren jeweils xich von ihm, und das Ergebnis ausgeben.
Bearbeiten: 6 Bytes dank @ ASCII-only für a) Verwenden von
SquareRoot()
anstelle vonPower(0.5)
b) VektorisierenDivide()
(es wurdeIntDivide()
stattdessen getan ) c)Power()
Vektorisieren gespeichert.quelle