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方式を選ぶとよいでしょう。用途に応じて使い分けることで、データクレンジングを効率的に進められます。
-
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()メソッドを
-
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]負の数値が含まれる場合でも正しく動作することがわかります。重複要素を検出する