【NumPy】数値の正負を判別・取得するnp.sign、np.signbit[Python]

  • URLをコピーしました!
目次

NumPy

前回、PythonのNumPyで正負の値に対し1、または0を返すヘヴィサイドの階段関数(np.heavside)を紹介しました。

今回はNumPyで数値の正負を判別・取得するnp.sign、np.signbitを紹介します。

それでは始めていきましょう。

数値の正負に対して1、-1を返すnp.sign

まずは数値の正負に対して1、-1を返すnp.signを紹介します。

「np.sign(数値)」とすると、数値が正の数の場合「1」を、負の数の場合「-1」を返します。

また数値が0の場合は「0」を返します。

import numpy as np

val1 = 5
val2 = -5
val3 = 0

print(np.sign(val1))
print(np.sign(val2))
print(np.sign(val3))

実行結果
1
-1
0

数値が欠損値NaNの場合はnanが返ってきます。

import numpy as np

val4 = np.nan

print(np.sign(val4))

実行結果
nan

数値はリストとして与えることもでき、その場合は結果がリストで返ってきます。

import numpy as np

val5 = [1, -2, 3, -4, 5]

print(np.sign(val5))

実行結果
[ 1 -1  1 -1  1]

数値以外を与えてしまうと、エラーとなります。

import numpy as np

val6 = "val"

print(np.sign(val6))

実行結果
---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
Cell In[3], line 5
      1 import numpy as np
      3 val6 = "val"
----> 5 print(np.sign(val6))

UFuncTypeError: ufunc 'sign' did not contain a loop with signature matching 
types <class 'numpy.dtypes.StrDType'> -> None

数値の正負に対してbool値を返すnp.signbit

数値の正負に対してbool値(True/False)を取得したい場合はnp.signbitを用います。

使い方は「np.signbit(数値)」で、数値が正の数の場合「False」を負の数の場合「True」を返します。

数値が「0」や「NaN」の場合は「False」を返します。

import numpy as np

val1 = 5
val2 = -5
val3 = 0
val4 = np.nan

print(np.signbit(val1))
print(np.signbit(val2))
print(np.signbit(val3))
print(np.signbit(val4))

実行結果
False
True
False
False

np.signと同様、値にはリストを与えることもでき、その場合は結果がリストとして返されます。

import numpy as np

val5 = [1, -2, 3, -4, 5]

print(np.signbit(val5))

実行結果
[False  True False  True False]

数値以外を与えるとエラーとなります。

import numpy as np

val6 = "val"

print(np.signbit(val6))

実行結果
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[4], line 5
      1 import numpy as np
      3 val6 = "val"
----> 5 print(np.signbit(val6))

TypeError: ufunc 'signbit' not supported for the input types, and the inputs 
could not be safely coerced to any supported types according to the casting rule ''safe''

次回はNumPyでリスト内の要素で条件に合った要素のインデックスを取得したり、置換するnp.whereを紹介します。

ではでは今回はこんな感じで。

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

コメント

コメントする

目次