Python で複素数かどうかを判定: `numpy.iscomplexobj()` 関数の使い方


構文

numpy.iscomplexobj(array)

ここで、

  • array は、検査対象の NumPy 配列です。

機能

この関数は、True または False を返します。

  • False は、配列が複素数型ではないことを示します。
  • True は、配列が複素数型 (例: complex64, complex128) であることを示します。

import numpy as np

# 複素数配列を作成
a = np.array([1.0 + 2j, 3.0 + 4j])

# 関数を使用する
result = numpy.iscomplexobj(a)

# 結果を表示
print(result)  # True を出力

この例では、a 配列は複素数であるため、関数は True を返します。

この関数は、以下の状況で役立ちます。

  • 計算中に誤りを回避する場合
  • 複素数配列にのみ適用される操作を実行する場合
  • 複素数と実数の配列を区別する必要がある場合

NumPy には、numpy.isrealobj(), numpy.isnan(), numpy.isinf() など、他の便利な論理関数があります。これらの関数は、それぞれ、配列が実数かどうか、要素が NaN (Not a Number) かどうか、要素が無限大かどうかを判断します。



複素数と実数の配列を区別する

import numpy as np

# 複素数と実数の配列を作成
complex_array = np.array([1.0 + 2j, 3.0 + 4j])
real_array = np.array([1.0, 2.0, 3.0])

# 関数を使用する
is_complex = numpy.iscomplexobj(complex_array)
is_real = numpy.iscomplexobj(real_array)

# 結果を表示
print("複素数配列:", is_complex)  # True を出力
print("実数配列:", is_real)       # False を出力

この例では、complex_array は複素数であるため、is_complex 変数は True になります。一方、real_array は実数であるため、is_real 変数は False になります。

複素数配列にのみ適用される操作を実行する

import numpy as np

# 複素数と実数の配列を作成
complex_array = np.array([1.0 + 2j, 3.0 + 4j])
real_array = np.array([1.0, 2.0, 3.0])

# 複素数配列にのみ絶対値を計算する
abs_complex = np.abs(complex_array)

# 結果を表示
print("複素数配列の絶対値:", abs_complex)

この例では、np.abs() 関数は複素数配列 complex_array にのみ適用され、各要素の絶対値を計算します。実数配列 real_array には適用されません。

import numpy as np

def add_complex_numbers(a, b):
  """
  2 つの複素数を足します。

  引数:
    a: 複素数
    b: 複素数

  返値:
    a と b の和 (複素数)
  """
  if not numpy.iscomplexobj(a) or not numpy.iscomplexobj(b):
    raise TypeError("引数は複素数型である必要があります。")
  return a + b

# 複素数と実数を入力
complex_num1 = 1.0 + 2j
real_num = 3.0

# 関数を使用する
try:
  result = add_complex_numbers(complex_num1, real_num)
except TypeError as e:
  print(e)
else:
  print("和:", result)



dtype 属性を使用する

NumPy 配列には、dtype 属性があります。これは、配列のデータ型を格納します。numpy.iscomplexobj() 関数の代わりに、以下のコードを使用して、配列が複素数かどうかを確認できます。

import numpy as np

array = np.array([1.0 + 2j, 3.0 + 4j])
is_complex = np.issubdtype(array.dtype, np.complexfloating)

print(is_complex)  # True を出力

このコードでは、np.issubdtype() 関数は、array.dtypenp.complexfloating のサブタイプかどうかを確認します。これは、配列が複素数型であることを意味します。

np.where() と np.iscomplex() を使用する

np.where() 関数は、条件に基づいて配列の要素を置き換えるために使用できます。この機能を使用して、numpy.iscomplex() 関数と組み合わせて、複素数かどうかを確認できます。

import numpy as np

array = np.array([1.0 + 2j, 3.0, 4.0 + 5j])
is_complex = np.where(np.iscomplex(array), True, False)

print(is_complex)  # [ True  False  True] を出力

このコードでは、np.iscomplex() 関数は、array の各要素が複素数かどうかを判断します。np.where() 関数は、その後、True または Falseis_complex 配列の対応する要素に置き換えます。