NumPyの配列同士の差を取得するsubtract関数の使い方

NumPyのsubtract関数は、2つの配列の各要素ごとの差分を求める関数です。-演算子を使った演算と出力結果も速度も同じですが、様々な引数を設定することが可能です。

ここでは、このnp.subtract()について簡潔に解説します。

NumPy配列の差分を取得する操作まとめ
配列の差分の操作に関しては、『NumPyの差分を取得する関数とメソッドまとめ』ですべて簡潔にまとめています。ぜひご確認ください。

目次

1. 書式

基本書式は次の通りです。

numpy.subtract

書き方:

np.subtract(x1, x2)

パラメーター:

引数 解説
x1, x2   array_like   ここに渡した2つの配列の要素ごとの差分を求めます。
out* ndarray 戻り値の配列で上書きする配列を指定します。戻り値の配列と、上書きする配列のshapeは一致している必要があります。
where* array_like of bool 引き算に含める要素を、要素がブール値の配列で指定します。
**kwargs   その他キーワード引数としてaxis, keepdims, casting, order, dtype, subok, signature, extobj を使用可能です。
* はオプション引数であることを示します。

戻り値: 

各要素の差分を格納した配列またはスカラー
x1とx2を要素ごとの差分を格納した配列を作成します。x1とx2のどちらもスカラーの場合はスカラーを返します。

一緒に確認したい関数:

  • diff: 配列の要素の階差数列を取得
  • ediff1d: 配列の要素の階差数列を1次元配列で取得

Note

np.subtract(x1, x2)の出力結果は x1 – x2 と同じです。単純な合計だけの場合、両者の速度はほとんど同じです。np.subtract()を使うメリットは単純な演算では設定できないパラメータ(オプション引数)を使用できる点にあります。

2. サンプルコード

それではサンプルコードを見ていきましょう。

以下の2つの配列x1 とx2 を使います。

In [1]:
import numpy as np
rng = np.random.default_rng()
x1 = rng.integers(0, 11, (2, 3))
x1
Out[1]:
array([[2, 3, 2],
       [6, 4, 0]])
In [2]:
x2 = rng.integers(0, 11, (2, 3))
x2
Out[2]:
array([[10,  6,  8],
       [ 2, 10,  3]])

2つの配列を両方ともnp.subtract()に渡します。すると、各要素ごとの差分を要素とする配列が戻ってきます。

In [3]:
# 2つの配列の要素ごとの差分を求める
np.subtract(x1, x2)
Out[3]:
array([[-8, -3, -6],
       [ 4, -6, -3]])

x1 とx2 は同じshapeであるか、ブロードキャスト可能なshapeになっている必要があります。ブロードキャストについては『覚えておくべきNumPy配列のブロードキャストのルール』で詳しく解説しています。

In [4]:
# 縦方向にブロードキャスト
np.subtract(x1, [5, 10, 15])
Out[4]:
array([[ -3,  -7, -13],
       [  1,  -6, -15]])
In [5]:
# 横方向にブロードキャスト
np.subtract(x1, [[5], [10]])
Out[5]:
array([[ -3,  -2,  -3],
       [ -4,  -6, -10]])

オプション引数の where で要素ごとの差分を取得する列や行などを特定することができます。

In [6]:
# オプション引数whereで特定の行や列の要素のみ差分を取得
np.subtract(x1, x2, where=[True, False, True])
Out[6]:
array([[-8,  0, -6],
       [ 4,  0, -3]])

Pythonは False=0 でありTrue=1 と解釈するので次のような書き方も可能です。

In [7]:
# この書き方も可能
np.subtract(x1, x2, where=[[0], [1]])
Out[7]:
array([[ 0,  0,  0],
       [ 4, -6, -3]])

なお、Falseの行や列には0が挿入されていますが、実際にはランダムな未初期化の値が挿入されています。未初期化値については『NumPyのempty関数で空の配列(未初期化配列)を生成する方法』をご覧いただくと理解が進むと思います。

また、ここでは割愛しますが、これ以外にもNumPyのユニバーサルファンクション(ufunc)をキーワード引数として設定可能です。例えば、axis, dtype, out, subok などです。

3. まとめ

以上が、np.subtract()の使い方です。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる