Python NumPy シフト配列
-
np.roll()メソッドを使用した NumPy シフト配列 - Python のスライスメソッドを使用した NumPy シフト配列
-
Python の
scipy.ndimage.interpolationライブラリ内のshift()関数を使用した NumPy シフト配列
このチュートリアルでは、NumPy 配列をシフトする方法を紹介します。
np.roll() メソッドを使用した NumPy シフト配列
NumPy 配列の要素を右シフトまたは左シフトする場合は、Python で numpy.roll() メソッドを使用できます。numpy.roll() メソッドは、指定された軸に沿って配列要素をロールするために使用されます。配列と、配列の要素をシフトする場所の数を取得し、シフトされた配列を返します。要素を右にシフトする場合は、シフト値として正の整数を使用する必要があります。要素を左にシフトする場合は、負のシフト値を指定する必要があります。次のコード例は、numpy.roll() メソッドを使用して配列の要素をシフトする方法を示しています。
import numpy as np
array = np.array([1, 2, 3, 4, 5])
array_new = np.roll(array, 3)
print(array_new)
出力:
[3 4 5 1 2]
最初に、np.array() 関数を使用して配列を作成しました。次に、np.roll() 関数を使用して要素を右にシフトし、結果の配列を array_new 内に格納しました。
Python のスライスメソッドを使用した NumPy シフト配列
要素を右または左にシフトし、シフトされたインデックスを定数値に置き換える場合は、Python の配列スライシングメソッドを使用する必要があります。元の配列と同じように、新しい空の配列を作成できます。シフト値が正の場合、配列の左側に定数値を入力し、シフト値が負の場合、配列の右側に定数値を入力します。次に、新しい配列の残りのインデックスを元の配列の値で埋めることができます。次のコード例は、配列スライシングメソッドを使用して配列の要素をシフトする方法を示しています。
import numpy as np
array = np.array([1, 2, 3, 4, 5])
num = -3
fill_value = 0
def shift(arr, num, fill_value):
result = np.empty_like(arr)
if num > 0:
result[:num] = fill_value
result[num:] = arr[:-num]
elif num < 0:
result[num:] = fill_value
result[:num] = arr[-num:]
else:
result[:] = arr
print(result)
shift(array, num, fill_value)
出力:
[4 5 0 0 0]
上記のコードの配列スライシングメソッドを使用して、配列の要素を左に 3 桁シフトする関数 shift() を定義しました。最初に、np.array() メソッドを使用して元の配列を作成しました。次に、配列要素をシフトするインデックスの数 num と、シフトされたすべてのインデックスを置き換える定数値 fill_value を指定しました。最後に、これらの値を shift() 関数に渡しました。この関数は、np.empty_like(arr) 関数を使用して元の配列のような新しい配列 result を作成し、シフトされた要素を格納し、シフトされた配列を出力します。
Python の scipy.ndimage.interpolation ライブラリ内の shift() 関数を使用した NumPy シフト配列
scipy.ndimage.interpolation ライブラリ内の shift() メソッドは、Python のスプライン補間メソッドを使用して配列をシフトするために使用されます。numpy.roll() メソッドとは異なり、shift() メソッドは配列をシフトし、シフトされたインデックスを指定された定数値に同時に置き換えることができます。shift() 関数は、元の配列、シフトするインデックスの数、およびシフトされたインデックスに置き換える定数値を入力パラメーターとして受け取り、シフトされた各インデックスが指定されたものに置き換えられるシフトされた配列を返します。定数値。次のコード例は、shift() 関数を使用して配列の要素をシフトする方法を示しています。
import numpy as np
from scipy.ndimage.interpolation import shift
array = np.array([1, 2, 3, 4, 5])
result = shift(array, 3, cval=0)
print(result)
出力:
[0 0 0 1 2]
上記のコードの shift() 関数を使用して、array の要素を右に 3 桁シフトし、シフトされたインデックスを 0 に置き換えました。最初に、np.array() 関数を使用して配列を作成しました。次に、シフト関数を使用して、array を 3 桁だけ右側にシフトし、元の配列の最初の 3つのインデックスを定数値 0 に置き換えました。shift() 関数の出力を result 配列内に格納しました。最後に、result 配列内の値を出力しました。
これらの方法はすべて問題なく機能します。配列内の値のみをシフトし、シフトされたインデックスを定数値に置き換えたくない場合は、numpy.roll() 関数を使用する必要があります。一方、シフトされたインデックスを特定の定数値に置き換えたい場合は、配列スライシング法がこの操作の最速の方法です。配列スライシングメソッドは高速ですが、scipy ライブラリの shift() 関数を使用するよりも少し複雑です。コードのパフォーマンスを気にしない場合は、このタスクに shift() 関数を使用できます。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn