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

Python NumPyのconvolve()で2つの1次元配列の離散線形畳み込みを計算する方法

numpy.convolve()メソッドとは

2つの1次元シーケンス(配列)の離散線形畳み込みを求めるには、PythonのNumPyライブラリが提供するnumpy.convolve()メソッドを使用します。畳み込み演算子は信号処理の分野でおなじみの概念で、線形時不変システムが信号へ与える影響をモデル化する際に用いられます。また、確率論においても、2つの独立な確率変数の和は、それぞれの分布の畳み込みに従うことが知られています。なお、vがaよりも長い場合、計算の前に自動的に配列が入れ替えられます。

このメソッドは、aとvの離散線形畳み込みを返します。各引数の詳細は以下の通りです。

  • 第1引数 a:最初の1次元入力配列
  • 第2引数 v:2番目の1次元入力配列
  • 第3引数 mode(省略可能):'full'、'valid'、'same' のいずれかを指定

mode='same' を指定すると、長さ max(M, N) の出力が返されます。ただし、境界部分の影響は依然として出力に現れる点に注意してください。参考までに、各モードの動作は次のようになります。

  • 'full':完全な畳み込み結果を返す(出力長は N+M−1)
  • 'same':入力と同じ程度の長さ max(M, N) の出力を返す
  • 'valid':要素が完全に重なり合う部分のみを返す(出力長は max(M, N) − min(M, N) + 1)

実行手順

ステップ1:必要なライブラリをインポートする

まず、NumPyをインポートします。

import numpy as np

ステップ2:2つの1次元配列を作成する

array()メソッドを使って、2つのNumPyの1次元配列を作成します。

arr1 = np.array([1, 2, 3])
arr2 = np.array([0, 1, 0.5])

ステップ3:配列を表示する

print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

ステップ4:両配列の次元を確認する

print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

ステップ5:両配列の形状を確認する

print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

ステップ6:離散線形畳み込みを計算する

numpy.convolve()メソッドを使い、2つの1次元シーケンスの離散線形畳み込みを求めます。ここではmode='same'を指定しています。

print("\nResult....\n",np.convolve(arr1, arr2, mode = 'same'))

完全なコード例

import numpy as np

# array()メソッドで2つのNumPy 1次元配列を作成
arr1 = np.array([1, 2, 3])
arr2 = np.array([0, 1, 0.5])

# 配列を表示
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.convolve()で離散線形畳み込みを計算
print("\nResult....\n",np.convolve(arr1, arr2, mode = 'same'))

出力結果

Array1...
[1 2 3]

Array2...
[0. 1. 0.5]

Dimensions of Array1...
1

Dimensions of Array2...
1

Shape of Array1...
(3,)

Shape of Array2...
(3,)

Result....
[1. 2.5 4.]

このように、mode='same'を指定した場合、入力配列と同じ長さ(この例では3要素)の出力が得られます。境界効果により端の値には影響が出ますが、信号処理やデータ解析など、さまざまな場面で活用できる便利なメソッドです。

  1. Python Pandas – 列の最大値を見つけて、対応する行の値を返す方法

    PandasのDataFrameで特定の列の最大値を見つけ、その最大値に対応する行全体の値を取得するには、df.loc[df[col].idxmax()]を使用します。idxmax()は最大値が含まれる行のインデックスを返し、それをdf.loc[]に渡すことで該当する行をSeriesとして取得できます。具体的な例で確認してみましょう。 手順 2次元でサイズ変更可能な表形式データ(DataFrame)dfを作成します。 入力DataFrame dfを出力して内容を確認します。 最大値を求めたい列名を変数colに設定します。 df.loc[df[col].idxmax()]を使って、最大値とそ

  2. Pythonで辞書のすべての値を取得・出力する方法

    Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu