Pythonで2つの配列の外積を計算する方法【numpy.outer()の使い方】
Pythonで2つの配列(ベクトル)の外積を求めるには、NumPyが提供する numpy.outer() メソッドを使用します。この記事では、outer() の基本的な使い方から、実際のコード例と実行結果までわかりやすく解説します。
numpy.outer() メソッドとは
numpy.outer() は、2つの入力ベクトルの外積を計算する関数です。主な引数は以下のとおりです。
- 第1引数 a: 最初の入力ベクトル。1次元でない場合、自動的に平坦化(flatten)されます。
- 第2引数 b: 2番目の入力ベクトル。こちらも1次元でない場合は平坦化されます。
- 第3引数 out: 計算結果を格納する場所(任意)。指定しない場合は新しい配列が返されます。
外積の定義
2つのベクトル a = [a0, a1, ..., aM] と b = [b0, b1, ..., bN] が与えられたとき、外積は次のような行列になります。
[[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . . ] [ ... . . ] [aM*b0 ... aM*bN ]]
つまり、結果は形状 (M+1) × (N+1) の2次元配列となり、各要素は「aの要素 × bの要素」の組み合わせすべてを含みます。
実装の手順
1. ライブラリのインポート
まず、必要なライブラリをインポートします。
import numpy as np
2. 1次元配列の作成
array() メソッドを使って、2つのNumPyの1次元配列を作成します。
arr1 = np.array([5, 10, 15]) arr2 = np.array([20, 25, 30])
3. 配列の表示
作成した配列を表示して確認します。
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)4. 次元数の確認
ndim 属性で、両方の配列の次元数をチェックします。
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)5. 形状の確認
shape 属性で、両方の配列の形状をチェックします。
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)6. 外積の計算
numpy.outer() メソッドを使って、2つの配列の外積を求めます。
print("\nResult (Outer Product)...\n",np.outer(arr1, arr2))完全なコード例
import numpy as np
# array()メソッドで2つのNumPyの1次元配列を作成
arr1 = np.array([5, 10, 15])
arr2 = np.array([20, 25, 30])
# 配列を表示
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.outer()メソッドで外積を計算
print("\nResult (Outer Product)...\n",np.outer(arr1, arr2))実行結果
Array1... [ 5 10 15] Array2... [20 25 30] Dimensions of Array1... 1 Dimensions of Array2... 1 Shape of Array1... (3,) Shape of Array2... (3,) Result (Outer Product)... [[100 125 150] [200 250 300] [300 375 450]]
まとめ
numpy.outer() を使えば、2つの1次元配列の外積を簡単に計算できます。結果として得られるのは、各要素同士の積をすべて組み合わせた2次元配列です。多次元配列を渡した場合も自動的に平坦化されるため、事前に形状を変換する必要がない点も便利です。線形代数の計算や機械学習の前処理など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。
-
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)を使って要素の出現頻度を管理することで、効率的に解くことができます。手順