[解決済み] Pythonでnumpyを使わずに変数にNaNを代入する
質問
ほとんどの言語には、変数にNaNという値を代入するために使用できるNaN定数があります。 pythonはnumpyを使用せずにこれを行うことができますか?
どのように解決するのですか?
はい。
math.nan
.
>>> from math import nan
>>> print(nan)
nan
>>> print(nan + 2)
nan
>>> nan == nan
False
>>> import math
>>> math.isnan(nan)
True
Python 3.5 より前のバージョンでは
float("nan")
(を使うことができました(大文字小文字は区別されません)。
NaNである2つのものが互いに等しいかどうかをチェックすると、常に偽が返されることに注意してください。これは、quot;not a number" である 2 つのものが (厳密に言えば) 互いに等しいと言うことができないことが理由の 1 つです。 IEEE754 の NaN 値に対してすべての比較が false を返すことの根拠は何ですか? を参照してください。
代わりに
math.isnan(...)
を使ってください。
さらに、正確なセマンティクスは
==
のようなコンテナ型の中にNaNを格納しようとすると、微妙な問題を引き起こす可能性があります。
list
または
dict
(を使用する場合(またはカスタムコンテナタイプを使用する場合)。参照
コンテナ内のNaNの存在を確認する
を参照してください。
また、Pythonの 10進数 モジュールを使ってもNaNを計算できます。
>>> from decimal import Decimal
>>> b = Decimal('nan')
>>> print(b)
NaN
>>> print(repr(b))
Decimal('NaN')
>>>
>>> Decimal(float('nan'))
Decimal('NaN')
>>>
>>> import math
>>> math.isnan(b)
True
math.isnan(...)
はDecimalオブジェクトでも動作します。
しかし、あなたは はできません。 でNaNを構成することはできません。 分数 モジュールでNaN数を構成します。
>>> from fractions import Fraction
>>> Fraction('nan')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\fractions.py", line 146, in __new__
numerator)
ValueError: Invalid literal for Fraction: 'nan'
>>>
>>> Fraction(float('nan'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python35\lib\fractions.py", line 130, in __new__
value = Fraction.from_float(numerator)
File "C:\Python35\lib\fractions.py", line 214, in from_float
raise ValueError("Cannot convert %r to %s." % (f, cls.__name__))
ValueError: Cannot convert nan to Fraction.
ちなみに、以下のようにすることもできます。
float('Inf')
,
Decimal('Inf')
または
math.inf
(3.5+)を使って無限大の数を割り当てることができます。(また
math.isinf(...)
)
しかし
Fraction('Inf')
または
Fraction(float('inf'))
は許されないので、NaNと同様に例外が投げられます。
もし、ある数字がNaNでも無限でもないことを素早く簡単に確認したいのであれば
math.isfinite(...)
を使うことができます。
複素数で同様のチェックを行いたい場合は
cmath
モジュールと同じような関数と定数のセットが含まれています。
math
モジュールと同じような関数と定数が含まれています。
-
cmath.isnan(...)
-
cmath.isinf(...)
-
cmath.isfinite(...)
(Python 3.2+) -
cmath.nan
(Python 3.6+; と同等です。complex(float('nan'), 0.0)
) -
cmath.nanj
(Python 3.6+; と同等です。complex(0.0, float('nan'))
) -
cmath.inf
(Python 3.6+; と同等です。complex(float('inf'), 0.0)
) -
cmath.infj
(Python 3.6+; と同等です。complex(0.0, float('inf'))
)
関連
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 文字列が空かどうかを確認する方法は?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] Pythonで定数を作成するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?