Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで2つの1次元配列の外積を求める方法【numpy.outer()の使い方】

Pythonで2つの1次元配列の外積(Outer Product)を求めるには、NumPyのnumpy.outer()メソッドを使用します。この関数は、機械学習や線形代数の計算などでよく使われる基本的な演算の一つです。

numpy.outer()のパラメータ

numpy.outer()関数は、以下の3つのパラメータを受け取ります。

  • a:最初の入力ベクトル。すでに1次元でない場合は、自動的にフラット化されます。
  • b:2番目の入力ベクトル。こちらも必要に応じて自動的にフラット化されます。
  • out:計算結果を格納する場所(省略可能)。

外積の定義

2つのベクトル a = [a0, a1, ..., aM] と b = [b0, b1, ..., bN] が与えられたとき、外積は次のように定義されます。

[[a0*b0  a0*b1 ... a0*bN ]
 [a1*b0    .
 [ ...     .
 [aM*b0        aM*bN ]]

つまり、結果として得られる行列の各要素は「第1ベクトルの要素 × 第2ベクトルの要素」となり、形状は (M+1, N+1) の2次元配列になります。

手順

まず、必要なライブラリをインポートします。

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)

2つの1次元配列の外積を求めるには、numpy.outer()メソッドを使用します。第1引数aには最初の入力ベクトル、第2引数bには2番目の入力ベクトルを指定します。入力が1次元でない場合は自動的にフラット化され、第3引数outには結果を格納する場所を指定することもできます。

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()メソッドで2つの1次元配列の外積を取得
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]]

結果の解説

出力を見ると、3×3の2次元配列が返されていることがわかります。各行・各列の値は、次のように計算されています。

  • result[0][0] = 5 × 20 = 100
  • result[0][1] = 5 × 25 = 125
  • result[1][2] = 10 × 30 = 300
  • result[2][2] = 15 × 30 = 450

このように、numpy.outer()を使えば、2つの1次元配列から簡単に外積行列を生成できます。入力が多次元配列の場合でも自動的にフラット化されるため、事前に形状を変換する必要がないのも便利なポイントです。

  1. Python NumPyで2つのベクトルの外積を計算する方法

    2つのベクトルの外積(クロス積)を計算するには、PythonのNumPyライブラリが提供する numpy.cross() メソッドを使用します。このメソッドは、指定された2つのベクトルの外積 c を返します。numpy.cross() メソッドの主な引数a:第1引数。最初のベクトルの成分です。b:第2引数。2番目のベクトルの成分です。axisa:第3引数。ベクトルを定義する a の軸を指定します。デフォルトは最後の軸です。axisb:第4引数。ベクトルを定義する b の軸を指定します。デフォルトは最後の軸です。axisc:第5引数。外積ベクトルを格納する c の軸を指定します。入力ベクトルがど

  2. Python(NumPy)で4次元配列と3次元配列のクロネッカー積を計算する方法

    クロネッカー積(Kronecker Product)とは PythonのNumPyでは、numpy.kron()メソッドを使うことで、4次元配列と3次元配列のように次元数が異なる配列同士でもクロネッカー積を簡単に求めることができます。クロネッカー積とは、第1の配列の各要素によって第2の配列全体をスケーリングしたブロックから構成される複合配列のことです。 kron()関数は、引数aとbの次元数が同じであることを前提としており、次元数が異なる場合は、小さい方の配列の先頭にサイズ1の軸が自動的に追加されます。a.shape = (r0, r1, …, rN)、b.shape = (s0, s1, …