Учитывая последовательность чисел для событий X и Y, рассчитайте коэффициент корреляции Пирсона. Вероятность каждого события равна, поэтому ожидаемые значения могут быть рассчитаны путем простого суммирования каждой серии и деления на количество испытаний.
вход
1 6.86
2 5.92
3 6.08
4 8.34
5 8.7
6 8.16
7 8.22
8 7.68
9 12.04
10 8.6
11 10.96
Вывод
0.769
Самый короткий код выигрывает. Ввод может быть через стандартный ввод или аргумент. Выход будет через стандартный вывод.
Редактировать: встроенные функции не должны быть разрешены (т.е. рассчитаны ожидаемые значения, отклонения, отклонения и т. Д.), Чтобы обеспечить большее разнообразие решений. Тем не менее, не стесняйтесь демонстрировать язык, который хорошо подходит для этой задачи, используя встроенные функции (для выставки).
Основано на идее Дэвида для ввода в Mathematica (86 символов с использованием встроенного среднего)
m=Mean;x=d[[All,1]];y=d[[All,2]];(m@(x*y)-m@x*m@y)/Sqrt[(m@(x^2)-m@x^2)(m@(y^2)-m@y^2)]
m = Mean;
x = d[[All,1]];
y = d[[All,2]];
(m@(x*y) - m@x*m@y)/((m@(x^2) - m@x^2)(m@(y^2) - m@y^2))^.5
Плинтус, используя наше собственное среднее значение (101 символ)
m=Total[#]/Length[#]&;x=d[[All,1]];y=d[[All,2]];(m@(x*y)-m@x*m@y)/((m@(x^2)-m@x^2)(m@(y^2)-m@y^2))^.5
m = Total[#]/Length[#]&;
x = d[[All,1]];
y = d[[All,2]];
(m@(x*y)-m@x*m@y)/((m@(x^2)-m@x^2)(m@(y^2)-m@y^2))^.5
источник
m=Total@#/Length@#&
Ответы:
PHP 144 байта
Принимает входные данные из STDIN, в формате, указанном в исходном сообщении. Результат:
Используя векторное произведение точек:
где входные векторы скорректированы вниз и соответственно.
Perl 112 байт
То же самое, другой язык. В обоих случаях новые строки были добавлены для «читабельности» и не обязательны. Единственная заметная разница в длине - это первая строка: разбор ввода.
источник
Mathematica 34 байта
Вот несколько способов получить корреляцию моментов произведения Пирсона. Все они дают одинаковый результат. От доктора Велизария: 34 байта
Встроенная корреляционная функция I : 15 символов
Это предполагает, что
x
иy
являются списки, соответствующие каждой переменной.Встроенная корреляционная функция II : 31 символ
Предполагается, что d - это список упорядоченных пар.
Применение
;;
заAll
спасибо Симмонсу.Опираясь на функцию стандартного отклонения :
118115 символовКорреляция может быть определена путем:
Соотношение ручного проката : 119 символов
Принимая
x
иy
списки ...источник
s
дляSum
./(n-1)
ошибочным переносом из более раннего решения. Сейчас исправлено.Q
Предполагая, что встроенные функции разрешены, а данные x, y являются отдельными векторами (7 символов):
Если данные хранятся в виде упорядоченных пар, как указано Дэвидом Каррахером, мы получаем (для 12 символов):
источник
MATLAB / Octave
Только для демонстрации встроенных модулей:
источник
APL 57
Используя подход точечного продукта:
источник
J
3027 байтНа этот раз как функция, принимающая два аргумента. Использует векторную формулу для его расчета.
Применение
объяснение
Принимает два списка a и b как отдельные аргументы.
источник
x
иy
в последней строке, соединив их вместе с,,.
чтобы дать вам((m@:*/@|:-*/@m)%%:@*/@(m@:*:-*:@m))x,.y
+/ .*&(%+/&.:*:)&(-+/%#)
J- форумах Олег имеет более короткую 24-байтовую версию .Python 3, 140 байт
Определены 2 вспомогательные функции (
E
иS
для ожидаемого значения и стандартного отклонения соответственно). Ввод ожидается в виде двух итераций (списки, кортежи и т. Д.). Попробуйте онлайн .источник
Oracle SQL 11.2, 152 байта (для выставки)
Un-golfed
Входная строка должна использовать тот же десятичный разделитель, что и база данных.
источник
Python 3 с SciPy, 52 байта (для выставки)
Анонимная функция , которая принимает данные из двух наборов данных в виде списков
x
иy
, и возвращает коэффициент корреляции.Как это работает
Здесь не так много происходит; SciPy имеет встроенную функцию, которая возвращает коэффициент и значение p для тестирования некорреляции, поэтому функция просто передает в нее наборы данных и возвращает первый элемент
(coefficient, p-value)
кортежа, возвращенный встроенной функцией.Попробуйте это на Ideone
источник