[解決済み] NumPyの配列が少なくとも1つの非数値的な値を含んでいるかどうかを検出する?
2022-05-16 12:24:58
質問
入力に少なくとも1つの非数値が含まれているかどうかを検出する関数を書く必要があります。もし非数値が見つかったらエラーを出します(計算では数値しか返さないはずなので)。入力配列の次元数は事前に知ることができません。この関数は ndim に関係なく正しい値を返す必要があります。さらに複雑なこととして、入力は1つの浮動小数点または
numpy.float64
あるいは0次元配列のような奇妙なものでさえも可能です。
これを解決する明らかな方法は、配列内のすべての反復可能なオブジェクトを反復し、反復不可能なオブジェクトを見つける再帰的な関数を書くことです。この関数は
numpy.isnan()
関数を適用します。少なくとも1つの非数値が見つかった場合、この関数は直ちに False を返します。それ以外の場合は、反復可能なオブジェクトのすべての値が数値であれば、最終的に真を返します。
これは問題なく動作しますが、かなり遅いです。 NumPy はそれを行うためのより良い方法を持っています。より速く、よりnumpy的な代替手段は何ですか?
これが私のモックアップです。
def contains_nan( myarray ):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True
どのように解決するのですか?
これは反復処理より速く、形状に関係なく動作するはずです。
numpy.isnan(myarray).any()
編集:30倍速くなりました。
import timeit
s = 'import numpy;a = numpy.arange(10000.).reshape((100,100));a[10,10]=numpy.nan'
ms = [
'numpy.isnan(a).any()',
'any(numpy.isnan(x) for x in a.flatten())']
for m in ms:
print " %.2f s" % timeit.Timer(m, s).timeit(1000), m
結果
0.11 s numpy.isnan(a).any()
3.75 s any(numpy.isnan(x) for x in a.flatten())
おまけ:配列でないNumPyの型でも問題なく動きます。
>>> a = numpy.float64(42.)
>>> numpy.isnan(a).any()
False
>>> a = numpy.float64(numpy.nan)
>>> numpy.isnan(a).any()
True
関連
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] NumPyの配列で、N個の最大値のインデックスを得るには?
-
[解決済み] NumPy の配列を csv ファイルにダンプする
-
[解決済み] NumPy多次元配列のi番目の列にアクセスする方法は?
-
[解決済み] numpy配列の中で最も近い値を検索する
-
[解決済み] Numpy配列の次元
-
[解決済み] 2D float numpy arrayを2D int numpy arrayに変換する方法は?
-
[解決済み] 配列内の何かの最初のインデックスを返すNumPy関数はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
-
[解決済み] なぜNaNはNaNと等しくないのですか?[重複あり]