Dada una lista de números de coma flotante, estandarícela .
Detalles
- Una lista está estandarizada si la media de todos los valores es 0, y la desviación estándar es 1. Una forma de calcular esto es calculando primero la media y la desviación estándar como
y luego calcular la estandarización reemplazando cadacon .
- Puede suponer que la entrada contiene al menos dos entradas distintas (lo que implica ).
- Tenga en cuenta que algunas implementaciones usan la desviación estándar de muestra, que no es igual a la desviación estándar de la población que estamos usando aquí.
- Hay una respuesta CW para todas las soluciones triviales .
Ejemplos
[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]
(Estos ejemplos se han generado con este script ).
CW para todas las entradas triviales
Python 3 + scipy, 31 bytes
Pruébalo en línea!
Octava / MATLAB, 15 bytes
Pruébalo en línea!
fuente
APL (Dyalog Classic) ,
212019 bytesPruébalo en línea!
⊢÷⌹
es suma de cuadrados⊢÷⌹×≢
es la suma de cuadrados dividida por la longitudfuente
MATL , 10 bytes
Pruébalo en línea!
Explicación
fuente
APL + WIN,
41,3230 bytes9 bytes guardados gracias a Erik + 2 más gracias a ngn
Solicita el vector de números y calcula la desviación estándar media y los elementos estandarizados del vector de entrada
fuente
x←v-(+/v)÷⍴v←⎕
y luego hacerx÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? en caso afirmativo, puede volver a escribir(+/x*2)÷⍴v
como+/x×x÷⍴v
R + pryr,
5352 bytes-1 byte usando en
sum(x|1)
lugar delength(x)
como se ve en la solución de @Robert S.Por ser un lenguaje creado para estadísticos, me sorprende que esto no tenga una función incorporada. Al menos no uno que pude encontrar. Incluso la función
mosaic::zscore
no produce los resultados esperados. Esto probablemente se deba al uso de la desviación estándar de la población en lugar de la desviación estándar de la muestra.Pruébalo en línea!
fuente
<-
a a=
para guardar 1 byte.scale
está ordenado!n
una vez que puede usarlo directamente por 38 bytesTcl , 126 bytes
Pruébalo en línea!
fuente
Jalea , 10 bytes
Pruébalo en línea!
No es más corto, pero la función determinante de Jelly
ÆḊ
también calcula la norma vectorial.fuente
Mathematica, 25 bytes
Pura función. Toma una lista de números como entrada y devuelve una lista de números de precisión de máquina como salida. Tenga en cuenta que la
Standardize
función integrada utiliza la varianza de muestra de forma predeterminada.fuente
J , 22 bytes
-1 byte gracias a Cows quack!
Pruébalo en línea!
J ,
3123 bytesPruébalo en línea!
fuente
[:(%[:%:1#.*:%#)]-+/%#
tio.run/##y/qfVmyrp2CgYKVg8D/… , creo que uno de esos límites podría eliminarse, pero hasta ahora no he tenido suerte, EDITAR: un bytes de almacenamiento más directo(-%[:%:1#.-*-%#@[)+/%#
también está en 22APL (Dyalog Unicode) ,
3329 bytes-4 bytes gracias a @ngn
Pruébalo en línea!
fuente
⍵-m
a una variable y eliminar dem←
esta manera:{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 bytesGracias a @flawr por las sugerencias para usar en
sum(1<$x)
lugar desum[1|_<-x]
e incluir la media, @xnor por incluir la desviación estándar y otras reducciones.Expandido:
fuente
[1|_<-x]
con(1<$x)
para guardar algunos bytes. ¡Es un gran truco para evitar elfromIntegral
que no he visto hasta ahora!m
.(-x+)
para(+(-x))
evitar padres. También parece quef
puede ser pointfree:,f=(/sum(1<$x))
ys
se puede reemplazar con su definición.(-x+)
es útil, estoy seguro de que lo usaré en el futuroMathGolf , 7 bytes
Pruébalo en línea!
Explicación
Esto es literalmente una recreación byte por byte de la respuesta 05AB1E de Kevin Cruijssen, pero guardo algunos bytes de MathGolf con 1 byters para todo lo necesario para este desafío. ¡También la respuesta se ve bastante bien en mi opinión!
fuente
JavaScript (ES7),
8079 bytesPruébalo en línea!
Comentado
fuente
Python 3 + numpy , 46 bytes
Pruébalo en línea!
fuente
Haskell , 59 bytes
Pruébalo en línea!
No usa bibliotecas.
La función auxiliar
%
calcula la suma de lasi
potencias de una lista, lo que nos permite obtener tres valores útiles.0%l
es la longitud del
(llame a eston
)1%l
es la suma del
(llame a estos
)2%l
es la suma de cuadrados del
(llame a estom
)Podemos expresar la puntuación z de un elemento
y
como(Esta es la expresión
(y-s/n)/sqrt(v/n-(s/n)^2)
simplificada un poco al multiplicar la parte superior e inferior porn
).Podemos insertar las expresiones
0%l
,1%l
,2%l
sin parens debido a que la%
definimos tiene mayor precedencia que los operadores aritméticos.(%)i=sum.map(^i)
tiene la misma longitud quei%l=sum.map(^i)l
. Hacerlo más libre de puntos no ayuda. Definirlo comog i=...
pierde bytes cuando lo llamamos. Aunque%
funciona para cualquier lista, pero solo la llamamos con la lista de entrada del problema, no hay pérdida de bytes al llamarla con argumentol
cada vez porque una llamada de dos argumentosi%l
no es más larga que una de un argumentog i
.fuente
%
idea! Se parece a la versión discreta de los momentos estadísticos .K (oK) ,
3323 bytes-10 bytes gracias a ngn!
Pruébalo en línea!
Primer intento de codificación (no me atrevo a llamarlo "golf") en K. Estoy bastante seguro de que se puede hacer mucho mejor (demasiados nombres de variables aquí ...)
fuente
(x-m)
cont
( tio ){
}
es innecesario - su nombre de parámetro implícito esx
y se le pasóx
como argumento ( tio )x-+/x
conx-/x
. el argumento izquierdo-/
sirve como valor inicial para la reducción ( tio )MATLAB, 26 bytes
Trivial-ish,
std(,1)
para usar la desviación estándar de la poblaciónfuente
TI-Basic (serie 83),
1411 bytesToma entrada
Ans
. Por ejemplo, si escribe lo anterior enprgmSTANDARD
, entonces{1,2,3}:prgmSTANDARD
volverá{-1.224744871,0.0,1.224744871}
.Anteriormente, intenté usar el
1-Var Stats
comando, que almacena la desviación estándar de la poblaciónσx
, pero es menos problemático calcularlo manualmente.fuente
05AB1E , 9 bytes
Puerto de la respuesta de JavaScript de @Arnauld , ¡así que asegúrese de votarlo!
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
Pyth,
2119 bytesPruébelo en línea aquí .
Editar: después de ver la respuesta de Kevin , cambió para usar el promedio incorporado para los resultados internos. Respuesta anterior:
mc-dJ.OQ@csm^-Jk2QlQ2
fuente
SNOBOL4 (CSNOBOL4) , 229 bytes
Pruébalo en línea!
Link es a una versión funcional del código que construye una matriz a partir de STDIN dada su longitud y luego sus elementos, luego ejecuta la función
Z
sobre eso y finalmente imprime los valores.Define una función
Z
que devuelve una matriz.La
1.
línea 4 es necesaria para hacer la aritmética de coma flotante correctamente.fuente
Julia 0.7 , 37 bytes
Pruébalo en línea!
fuente
Carbón ,
2519 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Calcularμ y vectorizado restarlo de cada Xyo .
Calcularσ , vectorizados dividir cada uno Xyo por él, y generar el resultado.
Editar: guardado 6 bytes gracias a @ ASCII-only para a) usar en
SquareRoot()
lugar dePower(0.5)
b) arreglar vectorizedDivide()
(en suIntDivide()
lugar) c) hacerPower()
vectorise.fuente