==
の代わりにnp.ma.equal
を使用してください。
========================
マスクされた配列はdata
アレイとマスクアレイからなります。しばしばマスクされた配列は、マスクされた値を無害なもので '塗りつぶしたり、それらを圧縮して他の操作で使用されます。私はこの==
テストで何が起こっているか完全にはわからないが、計算を見てみよう。
In [614]: A
Out[614]:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
In [615]: b
Out[615]: array([2, 3, 4])
In [612]: A==b
Out[612]:
array([[False, False, False],
[ True, True, True],
[False, False, False]], dtype=bool)
マスクされた配列を持っているdata
と
In [616]: c
Out[616]:
masked_array(data = [2 -- 4],
mask = [False True False],
fill_value = 999999)
In [617]: c.data
Out[617]: array([ 2, 99, 4])
In [618]: c.mask
Out[618]: array([False, True, False], dtype=bool)
In [619]: (A==c).data
Out[619]:
array([[False, False, False],
[ True, False, True],
[False, False, False]], dtype=bool)
このdata
mask
たちはA==c.data
から期待されています
あなたのストライドは配列を生成します。センター99
が一致しません。
しかし、c
のようにブール配列全体にマスクが適用されているように見えます。この場合、列配列 - 2番目の列ではなく2番目の列をマスクします。
In [624]: A==c
Out[624]:
masked_array(data =
[[False False False]
[-- -- --]
[False False False]],
mask =
[False True False],
fill_value = True)
私の最初の印象はエラーです。しかし、私はもっと掘る必要があります。
data
のA==c
は2dですが、マスクは1dです。私はc
3行を複製した場合
、その後、私は、所望の結果を得る:
In [638]: c[None,:]*np.array([1,1,1])[:,None]
Out[638]:
masked_array(data =
[[2 -- 4]
[2 -- 4]
[2 -- 4]],
mask =
[[False True False]
[False True False]
[False True False]],
fill_value = 999999)
In [639]: c1=c[None,:]*np.array([1,1,1])[:,None]
In [640]: A==c1
Out[640]:
masked_array(data =
[[False -- False]
[True -- True]
[False -- False]],
mask =
[[False True False]
[False True False]
[False True False]],
fill_value = True)
In [641]: (A==c1).all(axis=1)
Out[641]:
masked_array(data = [False True False],
mask = [False False False],
fill_value = True)
これを行うクリーンな方法があるかどうかはわからないが、それは解決策をする必要があるなどの方向を示します取る。
np.ma.equal
たちは(正しいマスクで==
比較)何をしたいん============
In [645]: np.ma.equal(A,c)
Out[645]:
masked_array(data =
[[False -- False]
[True -- True]
[False -- False]],
mask =
[[False True False]
[False True False]
[False True False]],
fill_value = 999999)
In [646]: np.ma.equal(A,c).any(axis=1)
Out[646]:
masked_array(data = [False True False],
mask = [False False False],
fill_value = True)
np.ma.equal
がnp.equal
のマスクされた対応バージョンで、どの要素==
によってufunc
要素のバージョン。
素晴らしい!この詳細な答えをありがとう。 – louic