Biorąc pod uwagę listę liczb zmiennoprzecinkowych, ujednolic ją .
Detale
- Lista jest standaryzowana, jeśli średnia wszystkich wartości wynosi 0, a odchylenie standardowe wynosi 1. Jednym ze sposobów obliczenia tego jest najpierw obliczenie średniej i odchylenia standardowego jako
a następnie obliczeniowej standaryzację zastępując każdyz .
- Możesz założyć, że dane wejściowe zawierają co najmniej dwa różne wpisy (co oznacza ).
- Zauważ, że niektóre implementacje wykorzystują przykładowe odchylenie standardowe, które nie jest równe odchyleniu standardu populacji którego tutaj używamy.
- Istnieje odpowiedź CW na wszystkie trywialne rozwiązania .
Przykłady
[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]
(Te przykłady zostały wygenerowane za pomocą tego skryptu ).
CW dla wszystkich trywialnych wpisów
Python 3 + scipy, 31 bajtów
Wypróbuj online!
Octave / MATLAB, 15 bajtów
Wypróbuj online!
źródło
APL (Dyalog Classic) ,
212019 bajtówWypróbuj online!
⊢÷⌹
jest sumą kwadratów⊢÷⌹×≢
to suma kwadratów podzielona przez długośćźródło
MATL , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
APL + WIN,
41,3230 bajtów9 bajtów zapisanych dzięki Erikowi + 2 więcej dzięki ngn
Monituje o wektor liczb i oblicza średnie odchylenie standardowe i znormalizowane elementy wektora wejściowego
źródło
x←v-(+/v)÷⍴v←⎕
a następnie zrobićx÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? jeśli tak, możesz przepisać(+/x*2)÷⍴v
jako+/x×x÷⍴v
R + pryr,
5352 bajty-1 bajt
sum(x|1)
zamiast zamiastlength(x)
jak widać w rozwiązaniu @Robert S.Będąc językiem zbudowanym dla statystyk, dziwi mnie to, że nie ma ono wbudowanej funkcji. Przynajmniej nie taki, który mogłem znaleźć. Nawet funkcja
mosaic::zscore
nie daje oczekiwanych rezultatów. Jest to prawdopodobnie spowodowane użyciem standardowego odchylenia populacji zamiast odchylenia standardowego próbki.Wypróbuj online!
źródło
<-
na a,=
aby zapisać 1 bajt.scale
jest schludne!n
raz, gdy możesz użyć go bezpośrednio dla 38 bajtówTcl , 126 bajtów
Wypróbuj online!
źródło
Galaretka , 10 bajtów
Wypróbuj online!
Nie jest krótszy, ale funkcja determinująca Jelly
ÆḊ
oblicza również normę wektorową.źródło
Mathematica, 25 bajtów
Czysta funkcja. Pobiera dane liczbowe jako dane wejściowe i zwraca listę liczb dokładności maszynowych jako dane wyjściowe. Zauważ, że wbudowana
Standardize
funkcja domyślnie używa wariancji próbki.źródło
J , 22 bajty
-1 bajt dzięki kwakowi Krowy!
Wypróbuj online!
J ,
3123 bajtówWypróbuj online!
źródło
[:(%[:%:1#.*:%#)]-+/%#
układu daje 22 tio.run/##y/qfVmyrp2CgYKVg8D/… , myślę, że jedną z tych czapek można usunąć, ale jak dotąd nie miałem szczęścia, EDYCJA: bardziej bezpośrednie wygaszanie jest(-%[:%:1#.-*-%#@[)+/%#
również na 22APL (Dyalog Unicode) ,
3329 bajtów-4 bajty dzięki @ngn
Wypróbuj online!
źródło
⍵-m
do zmiennej i usunąć wm←
następujący sposób:{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 bajtówDzięki @flawr za sugestie do użycia
sum(1<$x)
zamiastsum[1|_<-x]
i aby wstawić średnią, @xnor za wprowadzenie odchylenia standardowego i innych redukcji.Rozszerzony:
źródło
[1|_<-x]
z(1<$x)
zaoszczędzić kilka bajtów. To świetny sposób na uniknięcie tegofromIntegral
, czego do tej pory nie widziałem!m
.(-x+)
dla,(+(-x))
aby uniknąć parens. Wyglądaf
również na bezcelowy:f=(/sum(1<$x))
is
można go zastąpić jego definicją.(-x+)
jest przydatny, jestem pewien, że użyję tego w przyszłościMathGolf , 7 bajtów
Wypróbuj online!
Wyjaśnienie
Jest to dosłownie odtwarzanie bajt po bajcie odpowiedzi 05AB1E Kevina Cruijssena, ale oszczędzam kilka bajtów od MathGolf, który ma 1 bajt na wszystko, co jest potrzebne do tego wyzwania. Moim zdaniem odpowiedź również wygląda całkiem dobrze!
źródło
JavaScript (ES7),
8079 bajtówWypróbuj online!
Skomentował
źródło
Python 3 + numpy , 46 bajtów
Wypróbuj online!
źródło
Haskell , 59 bajtów
Wypróbuj online!
Nie korzysta z bibliotek.
Funkcja pomocnicza
%
oblicza sumęi
mocy listy, co pozwala uzyskać trzy przydatne wartości.0%l
jest długościąl
(nazwij ton
)1%l
jest sumąl
(nazwij tos
)2%l
jest sumą kwadratówl
(nazwij tom
)Możemy wyrazić wynik Z elementu
y
jako(To wyrażenie zostało
(y-s/n)/sqrt(v/n-(s/n)^2)
nieco uproszczone poprzez pomnożenie góry i dołu przezn
).Możemy wstawić wyrażeń
0%l
,1%l
,2%l
bez parens ponieważ%
definiujemy ma wyższy priorytet niż arytmetycznych operatorów.(%)i=sum.map(^i)
ma taką samą długość jaki%l=sum.map(^i)l
. Zwiększenie bezcelowości nie pomaga. Zdefiniowanie go jakg i=...
utratę bajtów, gdy go nazwiemy. Chociaż%
działa na dowolnej liście, ale wywołujemy ją tylko z listą problemów, nie wywołuje to utraty bajtu w wywoływaniu jej za pomocą argumentu zal
każdym razem, ponieważ wywołanie z dwoma argumentamii%l
nie jest dłuższe niż z jednym argumentemg i
.źródło
%
pomysł! Wygląda jak dyskretna wersja momentów statystycznych .K (oK) ,
3323 bajtów-10 bajtów dzięki ngn!
Wypróbuj online!
Pierwsza próba kodowania (nie odważę się nazywać go „golfem”) w K. Jestem całkiem pewien, że da się to zrobić znacznie lepiej (tutaj zbyt wiele nazw zmiennych ...)
źródło
(x-m)
zt
( tio ){
}
jest niepotrzebna - jej domyślna nazwa parametru tox
i została przekazanax
jako argument ( tio )x-+/x
gox-/x
. lewy argument-/
służy jako wartość początkowa redukcji ( tio )MATLAB, 26 bajtów
Trywialne,
std(,1)
do stosowania odchylenia standardowego populacjiźródło
TI-Basic (seria 83),
1411 bajtówWprowadza dane wejściowe
Ans
. Na przykład, jeśli wpiszesz powyższe wprgmSTANDARD
, wtedy{1,2,3}:prgmSTANDARD
wróci{-1.224744871,0.0,1.224744871}
.Wcześniej próbowałem użyć
1-Var Stats
polecenia, które przechowuje odchylenie standardowe populacjiσx
, ale obliczenie go ręcznie jest mniej trudne.źródło
05AB1E , 9 bajtów
Port @Arnauld JavaScript odpowiedź „s , więc upewnij się, aby go upvote!
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
Pyth,
2119 bajtówWypróbuj online tutaj .
Edycja: po zobaczeniu odpowiedzi Kevina zmieniono, aby użyć średniego wbudowanego dla wewnętrznych wyników. Poprzednia odpowiedź:
mc-dJ.OQ@csm^-Jk2QlQ2
źródło
SNOBOL4 (CSNOBOL4) , 229 bajtów
Wypróbuj online!
Link jest do funkcjonalnej wersji kodu, który konstruuje tablicę ze STDIN, biorąc pod uwagę jego długość, a następnie jego elementy, a następnie uruchamia funkcję
Z
i wreszcie drukuje wartości.Definiuje funkcję
Z
która zwraca tablicę.1.
Na linii 4 należy wykonać prawidłowo arytmetyki zmiennoprzecinkowej.źródło
Julia 0,7 , 37 bajtów
Wypróbuj online!
źródło
Węgiel ,
2519 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Obliczμ i wektoryzuj odejmij to od każdego xja .
Obliczσ , podzielone na wektory xja przez to i wypisz wynik.
Edycja: Zapisano 6 bajtów dzięki @ ASCII-tylko dla a) użycia
SquareRoot()
zamiastPower(0.5)
b) naprawiania wektoryzacjiDivide()
(IntDivide()
zamiast tego) c) tworzeniaPower()
wektoryzacji.źródło