Python で 2つのリストの内積を計算する

Isaac Tony 2023年1月30日
  1. Python で sum() および zip() 関数を使用して内積を計算する
  2. Python の map() および mul() 関数を使用して内積を計算する
  3. Python で more_itertools.dotproduct を使用して内積を計算する
  4. Python で NumPy を使用して内積を計算する
Python で 2つのリストの内積を計算する

内積は、スカラー積とも呼ばれる数学演算です。内積は、2つの等しい長さのシーケンスを取り、結果として 1つの数値を返す代数式です。

Python で sum() および zip() 関数を使用して内積を計算する

zip() 関数と sum() 関数を使用して、同じ長さのリストの内積を計算できます。

zip 関数は、両方の反復可能オブジェクトからのタプルのシーケンス内の要素を組み合わせることにより、zip オブジェクトを返します。一方、sum 関数は、リストなどの反復可能オブジェクト内のアイテムの合計を返します。

ドット積は数学的に数列からの要素の一連の合計と積を含むため、これら 2つの組み合わせを使用して 2つのリストのドット積を計算できます。

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

print(sum([i * j for (i, j) in zip(num1, num2)]))

出力:

1100

Python の map() および mul() 関数を使用して内積を計算する

Python の operator モジュールは、Python の組み込み演算子をインポートして使用し、さまざまな操作を実行するための一連の関数を提供します。

これらの演算には、論理演算、シーケンス演算、数学演算、およびオブジェクト比較が含まれます。mul() 関数は、データフレームなどの一連の数値を使用してオブジェクトの要素ごとの乗算を実行します。

一方、map() 関数は、反復可能オブジェクトのすべての要素に特定の関数を適用できるようにする組み込み関数です。最後に、次のコードに示すように、sum() 関数を使用して、2つの数値リストから積の合計を計算します。

from operator import mul

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

print(sum(map(mul, num1, num2)))

出力:

1100

Python で more_itertools.dotproduct を使用して内積を計算する

Python more_itertools は、Python で反復可能オブジェクトを操作するための洗練された関数を提供する Python ライブラリです。more_itertools ライブラリによって提供される関数を使用すると、ウィンドウ処理、組み合わせ論、ラッピングなどの他の操作の中で反復可能オブジェクトをグループ化して選択できます。

more_itertools ライブラリは、複雑な反復のソリューションを提供するだけではありません。また、よりエレガントでメモリ効率が高くなります。more_itertools.product() 関数を使用すると、以下に示すように、リスト内の一連の数値の内積を計算できます。

import more_itertools as mit

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]
print(mit.dotproduct(num1, num2))

出力:

1100

Python で NumPy を使用して内積を計算する

NumPy は、配列や行列などの多次元オブジェクトを操作できるようにする科学的な Python パッケージです。

NumPy は高速ですが、ごくわずかなコードで多くのことを達成できるため、より効率的です。ベクトル化されたコードを明示的にインデックス付けしたりループしたりすることなく、配列をシームレスに操作できます。

以下は、for ループと、積と加算演算子の組み合わせを使用して、2つのリストの内積を計算するソリューションです。

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

dot_product = 0
for x, y in zip(num1, num2):
    dot_product = dot_product + x * y
print("The dot product of the two lists is: ", dot_product)

出力:

The dot product of the two lists is:  1100

このソリューションは内積を計算しますが、NumPy はループを記述せずに、よりエレガントな代替手段を提供します。

numpy.dot() メソッドを使用すると、2つのリストの数列の内積を簡単に計算できます。このソリューションは正確であるため、エラーが発生しにくく、以下のコードで実装できます。

import numpy as np

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]
dot_product = np.dot(num1, num2)
print("The dot product of the two lists is: ", dot_product)

出力:

The dot product of the two lists is:  1100
著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

関連記事 - Python List