#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。
同値のある場合の中央値
http://aoki2.si.gunma-u.ac.jp/R/median.html
ファイル名: mymedian.jl 関数名: mymedian
翻訳するときに書いたメモ
return 文の中の accu は accuracy
==========#
using Statistics
mymedian = function (x; y=[], accuracy=0)
if length(y) == 0
med = median(x)
ntie = sum(x .== med)
if ntie != 1 && accuracy > 0
x = vcat(x[x .!= med], (med-(ntie+1)*accuracy/2/ntie) .+ (1:ntie)/ntie)
med = median(x)
end
return med
else
k = length(y)
length(x)-1 == k || error("length(x) - 1 ≠ length(y)")
csum = cumsum(y)
n = csum[k]
for i in 1:k
if csum[i] >= n/2
return x[i]-accuracy/2+(n/2-csum[i-1])/y[i]*(x[i+1]-x[i])
end
end
end
end
x = [1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5]
mymedian(x, accuracy=1) # 3.125
x = 1:6
f = [2, 4, 8, 6, 2]
mymedian(x, y=f, accuracy=1) # 3.125
※コメント投稿者のブログIDはブログ作成者のみに通知されます