相加平均

はじめに

プログラマをしていて数学がわからないために断念することが多いので数学を勉強してみることにしました。

相加平均とは一般的に使われる平均の値を算出するための計算式です。小学生で習う計算で普段何気なく使うこともあるのででやり方はわかると思いますが、式に直すとドンと難易度が上がったように感じます。

式を理解する

式の内容を紐解くと以下のようなことが書かれているようです。

この式の中で足し算と割り算が合体しているのでもっとわかりやすくするために色を分解します。

Σは総和を表しますi=1からnまで足し算を行います。

Swiftで理解する

式の内容がざっくりわかったところでSwiftに式を落とし込んで計算してみます。

今回は動物「ねこ、いぬ、うさぎ」の心拍数の平均値を相加平均で出してみようと思います。

struct Animal {
    let name: String
    let heartbeat: Int
}

let animals: [Animal] = [
    .init(name: "ねこ",
          heartbeat: 120),
    .init(name: "いぬ",
          heartbeat: 50),
    .init(name: "うさき", heartbeat: 150)
]

それぞれの値を定義にするとこうなります

let x = animal[i] 
let n = animal.count
let initValue = animal[0] //式的には1だけど配列の先頭は0なので0指定

これを式に直すとこうなります

var totalValue = 0
animals.forEach{
    totalValue += $0.heartbeat
}

ここまででΣ部分の総和を出すことができました!あとは1/nの部分を計算して平均を算出します、これで心拍数の平均106を求めることができました🎉

let average = totalValue / n
print(average)

// 106

Swiftらしく書く

Swiftには便利な配列操作のAPIが用意されているためtotalValueを一時変数として保持する必要なく書くこともが可能です

let n = animals.count

let average = animals
    .compactMap{ $0.heartbeat}
    .reduce(0, +) / n
print(average) // 106