[解決済み] NumPyでNaNを高速にチェックする
2022-05-24 01:26:53
質問
NaNの発生を確認する最も速い方法を探しています (
np.nan
) をチェックする最速の方法を探しています。
X
.
np.isnan(X)
は論外として、形状のブーリアン配列を構築するので
X.shape
という形のブール型配列を構築するため、これは巨大になる可能性があるからです。
私は
np.nan in X
を試してみましたが、これはうまくいかないようです。
np.nan != np.nan
. 高速でメモリ効率の良い方法は全くないのでしょうか?
("どのように巨大なのか"と尋ねるであろう人々へ。私にはわかりません。これはライブラリ コードの入力検証です)。
どのように解決するのですか?
Rayの解決策は良いものです。しかし、私のマシンでは、2.5 倍ほど速く
numpy.sum
の代わりに
numpy.min
:
In [13]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 244 us per loop
In [14]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 97.3 us per loop
とは異なり
min
,
sum
は分岐を必要としないので、最近のハードウェアではかなり高価になる傾向があります。これはおそらく
sum
の方が速い理由です。
編集 上記のテストは、配列のちょうど真ん中あたりにNaNが1つある状態で行われました。
興味深いのは
min
はNaNがない場合よりもNaNがある場合の方が遅いことに注意してください。また、NaNが配列の先頭に近いほど遅くなるようです。一方
sum
のスループットは、NaNがあるかどうか、どこにあるかには関係なく一定のようです。
In [40]: x = np.random.rand(100000)
In [41]: %timeit np.isnan(np.min(x))
10000 loops, best of 3: 153 us per loop
In [42]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.9 us per loop
In [43]: x[50000] = np.nan
In [44]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 239 us per loop
In [45]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.8 us per loop
In [46]: x[0] = np.nan
In [47]: %timeit np.isnan(np.min(x))
1000 loops, best of 3: 326 us per loop
In [48]: %timeit np.isnan(np.sum(x))
10000 loops, best of 3: 95.9 us per loop
関連
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] NaN値をチェックするにはどうすればよいですか?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み】forループを使った辞書の反復処理
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】Flaskのテンプレートが見つからない【重複あり