NumPy の配列から要素を削除する
この記事では、NumPy 配列から要素を削除する 2つの方法について学習します。
numpy.delete()
関数を使用して要素を削除する
次のコードを参照してください。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7]
modifiedArray = np.delete(myArray, indexes)
print(modifiedArray)
出力:
[ 1 2 3 5 7 9 10]
上記のコードでは、NumPy
ライブラリの delete()
関数を使用しています。delete()
関数は、arr
、obj
、および axis
の 3つのパラメーターを受け入れ、NumPy 配列を出力します。arr
は、要素を削除したい NumPy 配列です。obj
は整数のリストです。これらの番号は、配列から削除する必要がある要素のインデックスを表します。最後に、axis
はオプションの引数です。axis
は、obj
の対象となる要素を削除する軸を指します。このパラメータに None
値が割り当てられている場合、arr
はフラット化され、このフラット化された配列に対して削除が実行されます。
いつものように、arr
の範囲外にあるインデックスがこのメソッドに提供されると、IndexError
例外がスローされます。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7, 34]
modifiedArray = np.delete(myArray, indexes)
print(modifiedArray)
出力:
Traceback (most recent call last):
File "<string>", line 5, in <module>
File "<__array_function__ internals>", line 5, in delete
File "/path/to/library/numpy/lib/function_base.py", line 4480, in delete
keep[obj,] = False
IndexError: index 34 is out of bounds for axis 0 with size 10
この関数の詳細については、この関数の公式ドキュメントを参照してくださいこちら
多次元 NumPy 配列での削除の例をさらに 2つ示します。
import numpy as np
myArray = np.array([[1, 2, 3, 4, 5], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25]])
modifiedArray = np.delete(myArray, [1, 2], 1)
print(modifiedArray)
出力:
[[ 1 4 5]
[11 14 15]
[21 24 25]]
パラメータ axis
の値として None
を使用します。
import numpy as np
myArray = np.array([[1, 2, 3, 4, 5], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25]])
modifiedArray = np.delete(myArray, [1, 2], None)
print(modifiedArray)
出力:
[ 1 4 5 11 12 13 14 15 21 22 23 24 25]
numpy.setdiff1d()
関数を使用して要素を削除する
今回は、NumPy
の setdiff1d()
関数を使用します。この関数は、ar1
、ar2
、および assume_unique
の 3つのパラメーターを受け入れます。ar1
と ar2
は 2つの NumPy アレイです。また、assume_unique
はオプションのブール引数です。デフォルト値は False
です。True
の場合、2つの入力配列は一意であると見なされ、この想定により計算時間を短縮できます。
setdiff1d()
は、ar2
にはない ar1
の一意の値を返します。
次のコードを参照してください。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7]
modifiedArray = np.setdiff1d(myArray, indexes)
print(modifiedArray)
出力:
[ 1 2 4 6 8 9 10]
numpy.delete()
とは異なり、両方の配列は NumPy 配列であり、実際の要素は含まれていますが、インデックスは含まれていません。
この関数の詳細については、この関数の公式ドキュメントこちらを参照してください。