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)÷⍴vcomo+/x×x÷⍴vR + 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::zscoreno 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.scaleestá ordenado!nuna 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
Standardizefunció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
⍵-ma 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 elfromIntegralque no he visto hasta ahora!m.(-x+)para(+(-x))evitar padres. También parece quefpuede ser pointfree:,f=(/sum(1<$x))ysse 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 lasipotencias de una lista, lo que nos permite obtener tres valores útiles.0%les la longitud del(llame a eston)1%les la suma del(llame a estos)2%les la suma de cuadrados del(llame a estom)Podemos expresar la puntuación z de un elemento
ycomo(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%lsin 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 argumentolcada vez porque una llamada de dos argumentosi%lno 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 esxy se le pasóxcomo argumento ( tio )x-+/xconx-/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}:prgmSTANDARDvolverá{-1.224744871,0.0,1.224744871}.Anteriormente, intenté usar el
1-Var Statscomando, 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^-Jk2QlQ2fuente
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
Zsobre eso y finalmente imprime los valores.Define una función
Zque 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