0
0

More than 3 years have passed since last update.

2つの配列の要素を全部掛けて合計を求める

Posted at

はじめに

配列$x$と配列$y$のそれぞれの全要素を掛けて合計を求めたい。
単純に書くと下記のようになる。

    sum := 0
    for _, xi := range x {
        for _, yi := range y {
            sum += xi * yi
        }
    }

ループが二重になってしまい嬉しくない。

改善

xiは内側のループ中は変化しないので、外に出してやればいい。

    sum := 0
    for _, xi := range x {
        sumy := 0
        for _, yi := range y {
            sumy += yi
        }
        sum += xi * sumy
    }

sumyxとは無関係に求められるから、1回だけ計算すればいい。

    sumx := 0
    for _, xi := range x {
        sumx += xi
    }
    sumy := 0
    for _, yi := range y {
        sumy += yi
    }
    sum := sumx * sumy

二重ループが消えた。うれしい。

結論

数式っぽく書くと下記のような感じになる。
$$\sum_{ i=1 }^{ n }\sum_{ j=1 }^{ m } x_i y_j=\sum_{ i=1 }^{ n }x_i \sum_{ j=1 }^{ m }y_j$$
やっていることは因数分解と大して変わらないが、最初は理解できなかったので記録しておく。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0