Dada uma lista de números de ponto flutuante, padronize-a .
Detalhes
- Uma lista é padronizada se a média de todos os valores for 0 e o desvio padrão for 1. Uma maneira de calcular isso é calculando primeiro a média e o desvio padrão como
e depois computando a padronização substituindo cada por .
- Você pode supor que a entrada contenha pelo menos duas entradas distintas (o que implica ).
- Observe que algumas implementações usam o desvio padrão da amostra, que não é igual ao desvio padrão da população que estamos usando aqui.
- Existe uma resposta CW para todas as soluções triviais .
Exemplos
[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]
(Estes exemplos foram gerados com este script .)
CW para todas as entradas triviais
Python 3 + scipy, 31 bytes
Experimente online!
Oitava / MATLAB, 15 bytes
Experimente online!
fonte
APL (Dyalog Classic) ,
212019 bytesExperimente online!
⊢÷⌹
é soma de quadrados⊢÷⌹×≢
é a soma dos quadrados divididos pelo comprimentofonte
MATL , 10 bytes
Experimente online!
Explicação
fonte
APL + WIN,
41,3230 bytes9 bytes salvos graças a Erik e mais 2 graças a ngn
Solicita o vetor de números e calcula o desvio padrão médio e os elementos padronizados do vetor de entrada
fonte
x←v-(+/v)÷⍴v←⎕
e depois atribuirx÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? se sim, você pode reescrever(+/x*2)÷⍴v
como+/x×x÷⍴v
R + pryr,
5352 bytes-1 byte usando em
sum(x|1)
vez delength(x)
como visto na solução de @Robert S.Por ser uma linguagem criada para estatísticos, estou surpreso que isso não tenha uma função interna. Pelo menos não um que eu pudesse encontrar. Mesmo a função
mosaic::zscore
não produz os resultados esperados. Provavelmente, isso se deve ao uso do desvio padrão da população em vez do desvio padrão da amostra.Experimente online!
fonte
<-
para um=
para economizar 1 byte.scale
é legal!n
uma vez que você pode usá-lo diretamente para 38 bytesTcl , 126 bytes
Experimente online!
fonte
Gelatina , 10 bytes
Experimente online!
Não é mais curto, mas a função determinante de Jelly
ÆḊ
também calcula a norma vetorial.fonte
Mathematica, 25 bytes
Função pura. Pega uma lista de números como entrada e retorna uma lista de números de precisão da máquina como saída. Observe que a
Standardize
função interna usa a variação de amostra por padrão.fonte
J , 22 bytes
-1 byte graças ao vacas charlatão!
Experimente online!
J ,
3123 bytesExperimente online!
fonte
[:(%[:%:1#.*:%#)]-+/%#
tio.run/##y/qfVmyrp2CgYKVg8D/… , acho que um desses limites pode ser removido, mas ainda não teve nenhuma sorte até agora, EDIT: um comportamento de bytes mais direto(-%[:%:1#.-*-%#@[)+/%#
também está em 22APL (Dyalog Unicode) ,
3329 bytes-4 bytes graças a @ngn
Experimente online!
fonte
⍵-m
a uma variável e removerm←
assim:{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 bytesAgradecemos a @flawr pelas sugestões de uso, em
sum(1<$x)
vez desum[1|_<-x]
e para alinhar a média, @xnor por incluir o desvio padrão e outras reduções.Expandido:
fonte
[1|_<-x]
por(1<$x)
para salvar alguns bytes. Esse é um ótimo truque para evitar ofromIntegral
que eu não vi até agora!m
.(-x+)
para(+(-x))
evitar parênteses. Também parece quef
pode ser sem sentido:,f=(/sum(1<$x))
es
pode ser substituído por sua definição.(-x+)
é útil, tenho certeza que usarei isso no futuroMathGolf , 7 bytes
Experimente online!
Explicação
Isso é literalmente uma recriação de byte por byte da resposta 05AB1E de Kevin Cruijssen, mas economizo alguns bytes do MathGolf com 1 byters para tudo o que é necessário para esse desafio. Também a resposta parece muito boa na minha opinião!
fonte
JavaScript (ES7),
8079 bytesExperimente online!
Comentado
fonte
Python 3 + numpy , 46 bytes
Experimente online!
fonte
Haskell , 59 bytes
Experimente online!
Não usa bibliotecas.
A função auxiliar
%
calcula a soma dosi
th poderes de uma lista, o que nos permite obter três valores úteis.0%l
é o comprimento del
(chame isson
)1%l
é a soma del
(chame issos
)2%l
é a soma dos quadrados del
(chame issom
)Podemos expressar o escore z de um elemento
y
como(Essa é a expressão
(y-s/n)/sqrt(v/n-(s/n)^2)
simplificada um pouco, multiplicando a parte superior e inferior porn
.)Podemos inserir as expressões
0%l
,1%l
,2%l
sem parênteses porque o%
definimos tem precedência maior do que os operadores aritméticos.(%)i=sum.map(^i)
tem o mesmo comprimento quei%l=sum.map(^i)l
. Torná-lo mais livre de pontos não ajuda. Defini-lo comog i=...
perde bytes quando o chamamos. Embora%
funcione para qualquer lista, mas só a chamamos com a lista de entrada do problema, não há perda de bytes em chamá-la com argumentol
todas as vezes, porque uma chamada de dois argumentosi%l
não é maior que a de um argumentog i
.fonte
%
ideia! Parece com a versão discreta dos momentos estatísticos .K (ok) ,
3323 bytes-10 bytes graças a ngn!
Experimente online!
Primeira tentativa de codificação (não me atrevo a chamá-lo de "golfe") em K. Tenho certeza de que isso pode ser feito muito melhor (muitos nomes de variáveis aqui ...)
fonte
(x-m)
port
( tio ){
}
é desnecessário - seu nome implícito de parâmetro éx
e foi passadox
como argumento ( tio )x-+/x
porx-/x
. o argumento esquerdo-/
serve como valor inicial para a redução ( tio )MATLAB, 26 bytes
Trivial-ish,
std(,1)
para usar o desvio padrão da populaçãofonte
TI-Basic (série 83),
1411 bytesRecebe entrada
Ans
. Por exemplo, se você digitar o item acimaprgmSTANDARD
,{1,2,3}:prgmSTANDARD
retornará{-1.224744871,0.0,1.224744871}
.Anteriormente, tentei usar o
1-Var Stats
comando, que armazena o desvio padrão da populaçãoσx
, mas é menos complicado calculá-lo manualmente.fonte
05AB1E , 9 bytes
Porta da resposta JavaScript de @Arnauld , certifique-se de vomitá-lo!
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Geléia , 10 bytes
Experimente online!
fonte
Pyth,
2119 bytesExperimente online aqui .
Editar: depois de ver a resposta de Kevin , alterado para usar a média incorporada para os resultados internos. Resposta anterior:
mc-dJ.OQ@csm^-Jk2QlQ2
fonte
SNOBOL4 (CSNOBOL4) , 229 bytes
Experimente online!
Link é para uma versão funcional do código que constrói uma matriz a partir de STDIN, dado seu comprimento e seus elementos, e então executa a função
Z
e, finalmente, imprime os valores.Define uma função
Z
que retorna uma matriz.A
1.
linha 4 é necessária para fazer a aritmética do ponto flutuante corretamente.fonte
Julia 0,7 , 37 bytes
Experimente online!
fonte
Carvão ,
2519 bytesExperimente online! Link é a versão detalhada do código. Explicação:
Calcularμ e vetorizado subtraí-lo de cada xEu .
Calcularσ , vetorizados dividem cada xEu por ele e produz o resultado.
Edit: salvou 6 bytes graças a @ ASCII-only para a) usar em
SquareRoot()
vez dePower(0.5)
b) consertar vetorizadoDivide()
(estava fazendo issoIntDivide()
) c) fazerPower()
vetorizar.fonte