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

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

PythonのNumPyでは、numpy.convolve()メソッドを使うことで、2つの1次元シーケンス(配列)の離散線形畳み込みを簡単に求めることができます。

畳み込み演算は信号処理の分野でよく登場し、線形時不変システムが信号に与える影響をモデル化する際に用いられます。また確率論においても、独立な2つの確率変数の和の分布は、それぞれの分布の畳み込みとして表されます。なお、第2引数vが第1引数aより長い場合、計算前に自動的に配列が入れ替えられます。

numpy.convolve()のパラメータ

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

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

mode='valid' を指定した場合、出力の長さは max(M, N) - min(M, N) + 1 となります。このモードでは、信号が完全に重なり合う点のみについて畳み込み積が計算され、信号境界の外側の値は一切影響しません。

デフォルトのmode='full'では、重なり合うすべての点における畳み込みが返され、出力形状は (N+M-1,) になります。ただし、畳み込みの端点では信号が完全には重ならないため、境界効果が現れる場合があります。

実装手順

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

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()メソッドを使って、2つの1次元シーケンスの離散線形畳み込みを求めます。

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

コード例全体

import numpy as np

# array()メソッドで2つの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 = 'full'))

実行結果

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....
[0. 1. 2.5 4. 1.5]

このように、mode='full'を指定した場合、出力の長さは N+M-1 = 3+3-1 = 5 となり、畳み込みの結果 [0. 1. 2.5 4. 1.5] が得られます。

  1. 【Python入門】numpy.linalg.cholesky()でコレスキー分解を求める方法

    線形代数におけるコレスキー分解(Cholesky decomposition)とは、エルミート行列かつ正定値である正方行列 a を、下三角行列 L とその共役転置 LH の積「L * LH」に分解する手法です。NumPyでは numpy.linalg.cholesky() メソッドを使うことで、この分解を簡単に求めることができます。numpy.linalg.cholesky()メソッドの概要numpy.linalg.cholesky() は、引数として渡された正方行列のコレスキー分解を計算し、下三角行列 L を返します。このメソッドには以下のような特徴があります。前提条件: 入力行列 a はエ

  2. Python Pandas入門:インデックス値のメモリ使用量を確認する方法

    Pandasでインデックス値が占有しているメモリ使用量を確認したい場合は、index.memory_usage() メソッドを使用します。このメソッドは、インデックスが消費しているメモリ量をバイト単位で返してくれます。memory_usage()メソッドの基本的な使い方まず、必要なライブラリをインポートします。import pandas as pd次に、インデックスを作成します。index = pd.Index([15, 25, 35, 45, 55])作成したインデックスを表示してみましょう。print(Pandas Index...\n, index)そして、値のメモリ使用量を取得します。