2つのブール配列を比較するためのlogical_andと "&"の違い

2020-07-01 python arrays numpy

次のように2つのブール配列を比較しようとしています

# Create arrays
import numpy as np
my_house = np.array([18.0, 20.0, 10.75, 9.50])

# my_house greater than 18.5 and smaller than 10
print(np.logical_and(my_house > 18.5, my_house < 10))

^^と以下の違いは何ですか

# Create arrays
import numpy as np
my_house = np.array([18.0, 20.0, 10.75, 9.50])
a=my_house > 18.5
b=my_house < 10

# my_house greater than 18.5 and smaller than 10
print(a&b)

私が得る出力は同じです。 1stが2ndを超えるメリットは何ですか?そして、いつ2番目より1番目を好むべきですか?

Answers

違いはありますが、例のように引数がブール配列の場合は表示されません。

&bitwise_andであり、 logical_andとはbitwise_andます。

bitwise_andは、intのようなdtype配列に対してのみ定義され、その名前が示すとおりに動作します。ブール値と、引数間の対応するビットの各ペアに適用され、同じ型のintのような結果になります。

a=np.arange(5)
b=np.arange(5,10)

np.bitwise_and(a,b)
# array([0, 0, 2, 0, 0])
a&b
# array([0, 0, 2, 0, 0])

logical_andは、最初にオペランドをブール要素ごとに強制し、次にブール値を適用してブール配列を作成します。

np.logical_and(a,b)
# array([False,  True,  True,  True,  True])

実際には、留意すべき1つの癖があります。 & logical_and場所がよく見られます。その理由は、 logical_andには演算子のオーバーロードがないためです。一つは期待するかもしれないandしかし、残念ながら、PythonはIIRC自動的にオペランド強要うandそう、ブールへのnumpy要素ごとのセマンティクスが道ことを実装することができませんの。この投稿の冒頭で述べたように、オペランド配列がboolean、 logical_and 、およびbitwise_andで同じ結果が得られる限り、通常、自分自身を含むユーザーは、 logical_and代わりに&を書くという便利さに抵抗できません。

Related