任意の配列で倍x
表示されますの数をカウントするには、あなたは、単に結果というboolean型の配列を合計することができます
>>> col = numpy.arange(3)
>>> cols = numpy.tile(col, 3)
>>> (cols == 1).sum()
3
それは言うまでもないが、私はとにかくそれを言うよ::a == x
からあなたがそうのように、範囲を指定しない限り、これは浮動小数点数と非常に便利ではありません。
>>> a = numpy.random.random((3, 3))
>>> ((a > 0.5) & (a < 0.75)).sum()
2
この一般原則は、あらゆる種類のテストに有効です。たとえば、あなたは一体であり、浮動小数点値の数をカウントしたい場合:
>>> a = numpy.random.random((3, 3)) * 10
>>> a
array([[ 7.33955747, 0.89195947, 4.70725211],
[ 6.63686955, 5.98693505, 4.47567936],
[ 1.36965745, 5.01869306, 5.89245242]])
>>> a.astype(int)
array([[7, 0, 4],
[6, 5, 4],
[1, 5, 5]])
>>> (a == a.astype(int)).sum()
0
>>> a[1, 1] = 8
>>> (a == a.astype(int)).sum()
1
Imanol Luengoによって記載されているようにまた、あなたの目標が何であるかに応じて、np.isclose()
を使用することができます。しかし、値がの範囲にあるかどうかを知ることは、それらが任意の値に任意に近いかどうかを知るよりもしばしば役に立ちます。
isclose
の問題は、デフォルトの許容値(rtol
およびatol
)が任意であり、生成する結果が必ずしも明白でないか、または予測が容易でないことです。複雑な浮動小数点演算を処理するには、浮動小数点演算even moreを実行します。単純な範囲は正確に推論するのがはるかに簡単です。 (これはより一般的な原則の表現である:first, do the simplest thing that could possibly work)
なお、isclose
およびその同類のallclose
がその用途を有する。私は通常、配列全体が別の配列全体と非常に似ているかどうかを確認するためにそれらを使用しますが、これはあなたの質問ではないようです。
感謝@ senderle、-100.0のような浮動小数点数との比較はどうですか?小数点の後の0だけです – user308827