Как рассчитать дисперсию массива в Julia?

#julia

Вопрос:

У меня есть следующий массив, который мне нужен, чтобы определить его дисперсию:

 julia> a = [5, 6, 7, 8, 10, 12, 12, 17, 67, 68, 69, 72, 74, 74, 92, 93, 100, 105, 110, 120, 124]
21-element Vector{Int64}:
   5
   6
   7
   8
  10
  12
  12
  17
  67
  68
   ⋮
  74
  74
  92
  93
 100
 105
 110
 120
 124
 

Как я могу сделать это в Джулии?

Ответ №1:

Джулия имеет var функцию, встроенную в стандартный Statistics модуль. Так что вы можете просто сделать:

 using Statistics
var(a)
 

Пакет StatsBase.jl не экспортирует var функцию, поэтому ваш код не будет работать при использовании в новом сеансе Julia. Вместо этого вам придется написать StatsBase.var(a) (или добавить using Statistics ).

Что добавляет StatsBase.jl к var функции, так это то, что она определяет дополнительные методы, позволяющие вычислять взвешенную дисперсию. Так, например, следующее работает с StatsBase.jl (но в настоящее время не работало бы без него):

 julia> using Statistics

julia> using StatsBase

julia> var([1,2,3], Weights([1,2,3]))
0.5555555555555555
 

Ответ №2:

Если кто-то хочет рассчитать отклонение от первых принципов, вы можете сделать это:

 function my_variance(x)
    n = length(x)
    μ = sum(x) / n
    sum((x .- μ) .^ 2) / (n - 1)
end
 

Но, пожалуйста, просто используйте StatsBase.var !