Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでNumPyのfloat配列から整数を除外する方法

データクレンジング作業の中には、リストや配列に含まれる整数値を取り除きたいケースがあります。本記事では、float(浮動小数点数)とint(整数)が混在するNumPy配列を用意し、そこから整数を除外してfloatのみを抽出する方法を2つ紹介します。

方法1: astypeを使う

astype関数は、配列のデータ型を変換するためのメソッドです。これを利用すると、元の配列をint型に変換したものと比較することで、各要素が整数かどうかを判定できます。小数部分を持つfloatは変換時に切り捨てられるため、元の値と一致しなくなります。この性質を利用して、一致しない要素(=真のfloat)だけを結果として残します。

コード例

import numpy as np

# 配列の初期化
A_array = np.array([3.2, 5.5, 2.0, 4.1, 5])

print("与えられた配列 :\n ", A_array)

# 整数を除外
res = A_array[A_array != A_array.astype(int)]

# 結果の表示
print("整数を除いた配列:\n", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

与えられた配列 :
    [3.2 5.5 2. 4.1 5. ]
整数を除いた配列:
    [3.2 5.5 4.1]

方法2: equalとmodを使う

もう一つのアプローチでは、np.mod関数を使って配列の各要素を1で割った余りを求めます。整数であれば1で割った余りは必ず0になるため、余りが0でない要素はfloatであると判断できます。np.equalで「余りが0かどうか」を判定し、~(否定演算子)で反転させることで、floatのみを抽出しています。

コード例

import numpy as np

# 配列の初期化
A_array = np.array([3.2, 5.5, 2.0, 4.1, 5])

print("与えられた配列 :\n ", A_array)

# 整数を除外
res = A_array[~np.equal(np.mod(A_array, 1), 0)]

# 結果の表示
print("整数を除いた配列:\n", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

与えられた配列 :
    [3.2 5.5 2. 4.1 5. ]
整数を除いた配列:
    [3.2 5.5 4.1]

まとめ

どちらの方法もブールインデックス(マスク)を活用しており、簡潔に書けるのが特徴です。型変換の挙動を利用したい場合はastype方式、数値的な判定を行いたい場合はnp.mod方式を選ぶとよいでしょう。用途に応じて使い分けることで、データクレンジングを効率的に進められます。

  1. NumPyの3次元配列からMatplotlibで3Dプロットを作成する方法

    NumPyで作成した3次元配列からMatplotlibを使って3Dプロットを描画するには、まずnumpyで3次元配列を生成し、そこからx・y・z座標のデータを抽出します。以下の手順に従って実装できます。figure()メソッドを使用して、新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドを使用して、サブプロット配置の一部として図に~.axes.Axes(3D軸)を追加します。size=(3, 3, 3)のランダムデータを生成します。3次元配列からx、y、zのデータを抽出します。作成した軸上に3D散布図をプロットします。図を表示するには、show()メソッドを

  2. Pythonでリストから重複する要素を抽出して表示する方法

    この記事では、数値のリストの中から重複している要素(2回以上出現する、リスト内で一意ではない要素)をすべて抽出して表示するPythonプログラムを解説します。実行例入力: given_list = [3, 6, 9, 12, 3, 30, 15, 9, 45, 36, 12] 出力: desired_output = [3, 9, 12] 入力: given_list = [-27, 4, 29, -27, -2, -99, 123, 499, -99] 出力: desired_output = [-27, -99]負の数値が含まれる場合でも正しく動作することがわかります。重複要素を検出する