Учитывая список чисел с плавающей точкой, стандартизировать его .
Детали
- Список является стандартизированы , если среднее значение всех значений равно 0, а стандартное отклонение равно 1. Один из способов вычислить это сначала вычисления среднего и стандартное отклонение как
а затем вычисляет стандартизацию путем замены каждогона .
- Можно предположить, что вход содержит как минимум две разные записи (что подразумевает ).
- Обратите внимание, что в некоторых реализациях используется стандартное отклонение выборки, которое не равно стандартному отклонению совокупности мы здесь используем.
- Есть ответ CW для всех тривиальных решений .
Примеры
[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]
(Эти примеры были созданы с помощью этого сценария .)
CW для всех тривиальных записей
Python 3 + scipy, 31 байт
Попробуйте онлайн!
Октава / MATLAB, 15 байт
Попробуйте онлайн!
источник
APL (Dyalog Classic) ,
212019 байтовПопробуйте онлайн!
⊢÷⌹
это сумма квадратов⊢÷⌹×≢
сумма квадратов, деленная на длинуисточник
MATL , 10 байт
Попробуйте онлайн!
объяснение
источник
APL + WIN,
41,3230 байт9 байтов сэкономлено благодаря Erik + еще 2 благодаря ngn
Запрашивает вектор чисел и вычисляет среднее стандартное отклонение и стандартизированные элементы входного вектора
источник
x←v-(+/v)÷⍴v←⎕
а затем сделатьx÷((+/x*2)÷⍴v)*.5
?1 2 3+,4
← →1 2 3+4
)? если да, вы можете переписать(+/x*2)÷⍴v
как+/x×x÷⍴v
R + pryr,
5352 байтаИспользование -1 байта
sum(x|1)
вместо того,length(x)
что видно из решения @Robert S.For being a language built for statisticians, I'm amazed that this doesn't have a built-in function. At least not one that I could find. Even the function
mosaic::zscore
doesn't yield the expected results. This is likely due to using the population standard deviation instead of sample standard deviation.Try it online!
источник
<-
into a=
to save 1 byte.scale
is neat!n
once you can use it directly for 38 bytesTcl, 126 bytes
Try it online!
источник
Jelly, 10 bytes
Try it online!
It's not any shorter, but Jelly's determinant function
ÆḊ
also calculates vector norm.источник
Mathematica, 25 bytes
Pure function. Takes a list of numbers as input and returns a list of machine-precision numbers as output. Note that the built-in
Standardize
function uses the sample variance by default.источник
J, 22 bytes
-1 byte thanks to Cows quack!
Try it online!
J,
3123 bytesTry it online!
источник
[:(%[:%:1#.*:%#)]-+/%#
tio.run/##y/qfVmyrp2CgYKVg8D/…, I think one of those caps could be removed, but haven't had any luck so far, EDIT: a more direct byteshaving is(-%[:%:1#.-*-%#@[)+/%#
also at 22APL (Dyalog Unicode),
3329 bytes-4 bytes thanks to @ngn
Try it online!
источник
⍵-m
to a variable and removem←
like this:{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
Haskell,
807568 bytesThanks to @flawr for the suggestions to use
sum(1<$x)
instead ofsum[1|_<-x]
and to inline the mean, @xnor for inlining the standard deviation and other reductions.Expanded:
источник
[1|_<-x]
with(1<$x)
to save a few bytes. That is a great trick for avoiding thefromIntegral
, that I haven't seen so far!m
.(-x+)
для ,(+(-x))
чтобы избежать круглых скобок. Также похоже, чтоf
может быть pointfree:f=(/sum(1<$x))
иs
может быть заменено его определением.(-x+)
удобно, я уверен, что буду использовать это в будущемMathGolf, 7 bytes
Try it online!
Explanation
Это буквально побайтовое воссоздание ответа 05AB1E Кевина Круйссена, но я спасаю некоторые байты из MathGolf, имеющие 1 байт для всего, что нужно для этого испытания. Кроме того, ответ выглядит довольно хорошо, на мой взгляд!
источник
JavaScript (ES7),
8079 байтПопробуйте онлайн!
комментарии
источник
Python 3 + NumPy , 46 байт
Попробуйте онлайн!
источник
Haskell , 59 байт
Попробуйте онлайн!
Не использует библиотеки.
Вспомогательная функция
%
вычисляет суммуi
степеней списка, что позволяет нам получить три полезных значения.0%l
это длинаl
(назовите этоn
)1%l
это суммаl
(назовите этоs
)2%l
это сумма квадратовl
(назовите этоm
)Мы можем выразить z-счет элемента
y
как(Это выражение
(y-s/n)/sqrt(v/n-(s/n)^2)
немного упростили, умножив верхнюю и нижнюю наn
.)Мы можем вставить выражения
0%l
,1%l
,2%l
без скобок , так как%
мы определяем , имеет более высокий приоритет , чем арифметические операторы.(%)i=sum.map(^i)
такой же длины, какi%l=sum.map(^i)l
. Делать это более бессмысленно, не помогает. Определяя это какg i=...
теряет байты, когда мы называем это. Хотя это%
работает для любого списка, но мы вызываем его только со списком проблемных входов, приl
каждом вызове с аргументом не теряется ни одного байта, потому что вызов с двумя аргументамиi%l
не длиннее, чем вызов с одним аргументомg i
.источник
%
идея! Это выглядит как дискретная версия статистических моментов .K (ок) ,
3323 байта-10 байт благодаря ngn!
Попробуйте онлайн!
Первая попытка кодирования (я не смею называть это "игрой в гольф") на K. Я почти уверен, что это можно сделать намного лучше (слишком много имен переменных здесь ...)
источник
(x-m)
наt
( tio ){
}
не нужен - его неявное имя параметра есть,x
и ему был переданx
аргумент as ( tio )x-+/x
наx-/x
. левый аргумент,-/
служащий начальным значением для сокращения ( tio )MATLAB, 26 байтов
Trivial-ish,
std(,1)
для использования стандартного отклонения населенияисточник
TI-Basic (серия 83),
1411 байтовПринимает вход в
Ans
. Например, если вы введете выше вprgmSTANDARD
, то{1,2,3}:prgmSTANDARD
вернется{-1.224744871,0.0,1.224744871}
.Ранее я пытался использовать
1-Var Stats
команду, в которой хранится стандартное отклонение совокупностиσx
, но это не составляет труда вычислить его вручную.источник
05AB1E , 9 байт
Порт JavaScript @Arnauld 's answer , так что не забудьте его поддержать!
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Желе , 10 байт
Попробуйте онлайн!
источник
Pyth,
2119 байтПопробуйте это онлайн здесь .
Изменить: после просмотра ответа Кевина , изменил использовать средние встроенные для внутренних результатов. Предыдущий ответ:
mc-dJ.OQ@csm^-Jk2QlQ2
источник
SNOBOL4 (CSNOBOL4) , 229 байтов
Попробуйте онлайн!
Ссылка - на функциональную версию кода, которая создает массив из STDIN, учитывая его длину, а затем его элементы, затем запускает функцию
Z
и, наконец, выводит значения.Определяет функцию,
Z
которая возвращает массив.1.
На линии 4 необходимо выполнить арифметические операции с плавающей запятой правильно.источник
Юлия 0,7 , 37 байт
Попробуйте онлайн!
источник
Древесный уголь ,
2519 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Рассчитатьμ и векторизовать вычесть его из каждого Икся ,
Рассчитатьσ Векторизованное деление каждого Икся и выведите результат.
Редактировать: Сохранено 6 байтов благодаря @ ASCII-only для a) использования
SquareRoot()
вместоPower(0.5)
b) исправления векторизацииDivide()
(IntDivide()
вместо этого) c) созданияPower()
векторизации.источник