Python numpy std против scala breeze stddev

В настоящее время я работаю над переносом кода Python на scala. Я использую breeze lib вместо numpy.

Все выглядит нормально, но я столкнулся с другим поведением при выводе реализаций стандартного отклонения:

Python:

series = np.array([1,4,5])
np.mean(series) // 3.3333333333333335
np.std(series) // 1.699673171197595

Скала:

val vector = breeze.linalg.Vector[Double](Array(1.0, 4.0, 5.0))
val mean = breeze.stats.mean(vector) // 3.3333333333333335
val std = breeze.stats.stddev(vector) // 2.081665999466133

Я знаю, как воспроизвести поведение Python на простом Scala. Пример кода представлен здесь: Scala: каков общий способ вычисления стандартного отклонения

Но я ищу способ получить это с легкостью. Любые идеи?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
727
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это связано с количеством степени свободы. Действительно,

>>> np.std(series, ddof=1)
2.081665999466133

Это образец std. Что-то, что вы можете сделать, чтобы получить стандартную численность населения,

var n   = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948

Спасибо за объяснение. Я нашел связанную проблему на странице Breeze GitHub: github.com/scalanlp/breeze/issues/507

Normal 17.10.2018 15:40

@Normal Это может быть что-то, что вы знаете, но посмотрите мое обновление о том, как решить эту проблему.

keepAlive 17.10.2018 16:01

Если решение keepAlive не работает, вам следует изменить "n" на Double

var n : Double  = 3
val std = breeze.stats.stddev(vector)*Math.pow((n-1)/n, .5)
# 1.6996731711975948

Другие вопросы по теме