私が正しく理解していれば、5つの配列を追加して、ピクセルの合計が5のマスクを作成したいと思います。ここでは、Pythonとその構文とは関係のないいくつかの欠点があります。
まずが、Pythonでブール値がTrue
とFalse
、0
と1
のように定義されているだけで(あなたがbitewiseそれらを比較した場合、完全に真実ではないが、ちょうど今のところこれを残すことができます)なしブール型プロパティで整数です。
第2に、logical and
演算子で、0と1の5つの配列を合計し、5の合計が5になるインデックスを見つけると、論理的に直接比較することができます。
擬似コードは次のようになります。
をマスクの数が少ない場合:
result = bool_mask[0] & bool_mask[1] & bool_mask[2] & bool_mask[3]
マスクが多数の場合:
# bool_mask = [a, b, c, d, e, f....] number of boolean arrays
result = bool_mask[0] # Equivalent to:
for mask in bool_mask[1:]: # for i in range(1, len(bool_mask)):
result &= mask # result &= bool_mask[i]
とN
はマスク数、bool_mask
は比較対象のboolean arrays
を含むリストです。
まず、ブール値配列を正しく作成する必要があります。 numpyのを使用すると、さまざまな方法でそれを行うことができます。
がそれを作成:
>>> A = np.array([1, 0, 1], dtype=np.bool) # will cast 1 to True and 0 to False
>>> A
array([ True, False, True], dtype=bool)
がそれを変換:
>>> A = np.array([1, 0, 1], dtype=int) # An integer array with 0 and 1
>>> A = A.astype(np.bool)
>>> A
array([ True, False, True], dtype=bool)
それを比較:
>>> A = np.array([1, 0, 1], dtype=int) # Same int array
>>> A = A > 0.5
>>> A
array([ True, False, True], dtype=bool)
を
あなたの
ブール配列が本当にブール値になったら、
疑似コード(これは実際の作業コードです)のいずれかが問題なく動作します。その後
、あなたはすべてのマスクは、他の場所で交差し、False
True
値を持つタイプnp.bool
(ブール)の配列result
で終わるかどう。あなたが本当に戻って0
と1
値に戻りたい場合は、あなただけの結果をダウンキャストできます0
からFalse
ながら
result = result.astype(int)
そしてTrue
は1
にマップされます。同じようなことを行う他の方法は、次のようになります。
result = result * 1
数値演算の種類はすべてブール値の配列を整数にキャストします。
(前述したように)さて、あなたは1
もののおよび0
配列が同じブール配列、ではないと&
オペレータがいる限り(ブール配列のように動作終わるでしょう一口ごとの比較を行うことを、わかります彼らは1
と0
の値しか含んでいません)。したがって、
result = a & b & c & d
はとboolean
アレイ(のみ1
と0
で)の両方integer
のために働くことになります。しかし、boolean indexingのようなnumpyの多くの興味深い機能は、配列が本当にブール型(整数配列0
と1
はあなたが期待するものとはまったく異なっている)の場合にのみ機能するので、ブール型配列を使用することをお勧めします。
あなたが何を求めているのか分かりません。あなたは5つの配列を取って、いずれかの配列に1が現れる回数を数えますか? "他の値== 0"とはどういう意味ですか? – kjschiroo
はい、最初に5つの配列を合計したいと思います。各配列(値が1または0のピクセルを持つラスタ)。次に、合計配列のピクセルがラスタ配列) - これらのピクセルの最大値= 5、これらのピクセル1に、値4,3,2,1の値0の他のすべてのピクセルを与えたい場合 – Adams
このようにして何を期待していますか? – kjschiroo