ubuntuのすばらしい説明reduce
があれば、問題を解決するために使用できますがbitwise_and
、bitwise_or
ではなくに適用する必要がありますequal
。結果として、これは浮動小数点配列では機能しません。
In [60]: np.bitwise_and.reduce(a) == a[0]
Out[60]: array([ True, False, True], dtype=bool)
In [61]: np.bitwise_and.reduce(b) == b[0]
Out[61]: array([ True, False, True], dtype=bool)
基本的に、列の各要素のビットを比較しています。同一のビットは変更されません。異なるビットはゼロに設定されます。このように、1ビットではなくゼロを持つ数値は減少した値を変更します。bitwise_and
ビットが削除されるのではなく導入される場合をトラップしません:
In [62]: c = np.array([[1,0,0],[1,0,0],[1,0,0],[1,1,0]])
In [63]: c
Out[63]:
array([[1, 0, 0],
[1, 0, 0],
[1, 0, 0],
[1, 1, 0]])
In [64]: np.bitwise_and.reduce(c) == c[0]
Out[64]: array([ True, True, True], dtype=bool)
2番目の列は明らかに間違っています。bitwise_or
新しいビットをトラップするために使用する必要があります。
In [66]: np.bitwise_or.reduce(c) == c[0]
Out[66]: array([ True, False, True], dtype=bool)
最終回答
In [69]: np.logical_and(np.bitwise_or.reduce(a) == a[0], np.bitwise_and.reduce(a) == a[0])
Out[69]: array([ True, False, True], dtype=bool)
In [70]: np.logical_and(np.bitwise_or.reduce(b) == b[0], np.bitwise_and.reduce(b) == b[0])
Out[70]: array([ True, False, True], dtype=boo
In [71]: np.logical_and(np.bitwise_or.reduce(c) == c[0], np.bitwise_and.reduce(c) == c[0])
Out[71]: array([ True, False, True], dtype=bool)
この方法は、ubunutが提案しているを使用するよりも制限が厳しく、洗練されall
ていませんが、入力が膨大な場合に巨大な一時配列を作成しないという利点があります。一時配列は、行列の最初の行と同じ大きさである必要があります。
編集
このQ/Aとnumpyに提出したバグに基づいて、提供されたソリューションは、配列に0と1が含まれているためにのみ機能します。たまたま、示されている操作は、ではなく、でbitwise_and.reduce()
あるため、0または1しか返すことができません。私はこの答えを修正し、答えが有効になることを期待して保持しています。bitwise_and.identity
1
-1
numpy
編集
実際、すぐにnumpyに変更されるようです。確かにbitwise_and.identity
、そしておそらく削減するオプションのパラメータ。
編集
皆さん朗報です。のIDは、バージョンの時点でにnp.bitwise_and
設定されています。-1
1.12.0