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()の使い方です。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる