【Python】numpy.inner()で2つの多次元配列の内積を計算する方法
2つの多次元配列の内積(インナー積)を求めるには、Pythonのnumpy.inner()メソッドを使用します。このメソッドは、1次元配列に対しては通常のベクトルの内積を計算し、高次元配列に対しては最後の軸に沿った要素ごとの積の総和を返します。
引数として渡すのは a と b の2つの配列です。なお、aとbがスカラーでない場合は、両者の最後の軸のサイズが一致している必要があります。
内積を計算する手順
まず、必要なライブラリをインポートします。
import numpy as np
array()メソッドを使って、2つのNumPyの2次元配列を作成します。
arr1 = np.array([[5, 10], [15, 20]]) arr2 = np.array([[6, 12], [18, 24]])
作成した配列を表示して内容を確認します。
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)
両方の配列の次元数(ndim)を確認します。
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)
続いて、両方の配列の形状(shape)を確認します。
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)
最後に、numpy.inner()メソッドを使って2つの多次元配列の内積を計算します。
print("\nResult (Inner Product)...\n",np.inner(arr1, arr2))
完全なサンプルコード
import numpy as np
# array()メソッドで2つのNumPyの2次元配列を作成
arr1 = np.array([[5, 10], [15, 20]])
arr2 = np.array([[6, 12], [18, 24]])
# 配列を表示
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)
# 両方の配列の次元数を確認
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)
# 両方の配列の形状を確認
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)
# numpy.inner()メソッドで2つの多次元配列の内積を計算
print("\nResult (Inner Product)...\n",np.inner(arr1, arr2))
実行結果
Array1... [[ 5 10] [15 20]] Array2... [[ 6 12] [18 24]] Dimensions of Array1... 2 Dimensions of Array2... 2 Shape of Array1... (2, 2) Shape of Array2... (2, 2) Result (Inner Product)... [[150 330] [330 750]]
計算結果の解説
np.inner()は、各配列の最後の軸に沿って対応する要素同士を掛け合わせ、その合計を計算します。今回の例では、結果は以下のように求められます。
- 結果[0][0] = 5×6 + 10×12 = 30 + 120 = 150
- 結果[0][1] = 5×18 + 10×24 = 90 + 240 = 330
- 結果[1][0] = 15×6 + 20×12 = 90 + 240 = 330
- 結果[1][1] = 15×18 + 20×24 = 270 + 480 = 750
このように、np.inner()を使えば行列のような多次元配列同士の内積も簡単に計算できます。機械学習や数値計算で頻繁に使われる演算なので、ぜひ覚えておきましょう。
-
Pythonで2つのリストの要素の積からk番目に大きい値を求めるプログラム
整数を含む2つのリスト p と q が与えられたとします。この問題では、両リストの要素をすべて掛け合わせた積の中から、k番目に大きい値(インデックスは0から開始)を求めます。 たとえば、入力が p = [2, 5]、q = [6, 8]、k = 2 の場合、出力は 16 になります。 考えられる積は次の4つです。 2 × 6 = 12 2 × 8 = 16 5 × 6 = 30 5 × 8 = 40 これらを降順に並べると [40, 30, 16, 12] となるため、インデックス2の要素、すなわち求める答えは 16 です。 解法のアプローチ すべての組み合わせの積を計算してソートする方法も
-
Pythonで2つの配列の共通部分(交差)を効率的に求める方法
問題概要2つの配列 A と B が与えられたとき、これらの配列に共通して含まれる要素(交差・共通部分)を求めます。例えば、A = [1, 4, 5, 3, 6]、B = [2, 3, 5, 7, 9] の場合、両方の配列に存在する要素は 3 と 5 だけなので、結果は [3, 5] となります。この種の問題では重複の扱いがポイントになります。ある要素が両方の配列に複数回現れる場合は、その出現回数のうち少ない方の回数だけ結果に含める必要があります。解法のアプローチこの問題は、ハッシュマップ(Pythonでは辞書型 dict)を使って要素の出現頻度を管理することで、効率的に解くことができます。手順