4
>>> import numpy as np
>>> x = np.eye(3)
>>> x[1, 2] = .5
>>> x
array([[ 1. ,  0. ,  0. ],
       [ 0. ,  1. ,  0.5],
       [ 0. ,  0. ,  1. ]])
>>> 0 < x.any() < 1
False
>>> 

numpy 配列に 0 から 1 の間の値が含まれているかどうかを確認したいと思います。 「サイズが 0 より大きく 1 より小さい要素がある場合は true を返す」
と読み0 < x.any() < 1ましたが、明らかにそうではありません。

numpy配列で算術比較を行うにはどうすればよいですか?

4

2 に答える 2

2
>>> np.any((0 < x) & (x < 1))
True

実際の動作:とx.any()同じです。つまり、 の要素が非ゼロの場合np.any(x)に戻ります。したがって、あなたの比較は です。これは、python 2では true であるため false ですが、そうではありません。Truex0 < True < 10 < TrueTrue < 1True == 1

対照的に、このアプローチでは、比較が各要素に対して真であるかどうかのブール配列を作成し、その配列のいずれかの要素が真であるかどうかを確認します。

>>> 0 < x
array([[ True, False, False],
       [False,  True,  True],
       [False, False,  True]], dtype=bool)
>>> x < 1
array([[False,  True,  True],
       [ True, False,  True],
       [ True,  True, False]], dtype=bool)
>>> (0 < x) & (x < 1)
array([[False, False, False],
       [False, False,  True],
       [False, False, False]], dtype=bool)

&残念ながら、numpy は python の組み込みの比較演算子の連鎖では機能しない (そして私はできないと思う) ため、明示的に実行する必要があります。

于 2013-03-13T19:53:37.940 に答える
1

コードは最初に をテストx.any()し、これは に評価されTruexゼロ以外の値が含まれています。0 < True (=1) < 1次に、 である をテストしFalseます。行う:

((0 < x) & (x < 1)).any()
于 2013-03-13T19:55:48.830 に答える