2016-03-29 10 views
0

私はPython構文では新しいです。配列を合計してピクセル== 1の最終的な大きな値を得るには、他の値== 0

5つの配列(ブール値、ピクセル1または0の値を持つ)を合計し、pixel(5) == 1の最終的な大きな値を入れたい場合はvalues == 0とします。

resArraySum = np.array(5, (first | second | third | fourth | fifth), 1, 0) 
print resArraySum 

これは正しくありません。

+1

あなたが何を求めているのか分かりません。あなたは5つの配列を取って、いずれかの配列に1が現れる回数を数えますか? "他の値== 0"とはどういう意味ですか? – kjschiroo

+0

はい、最初に5つの配列を合計したいと思います。各配列(値が1または0のピクセルを持つラスタ)。次に、合計配列のピクセルがラスタ配列) - これらのピクセルの最大値= 5、これらのピクセル1に、値4,3,2,1の値0の他のすべてのピクセルを与えたい場合 – Adams

+0

このようにして何を期待していますか? – kjschiroo

答えて

1

私が正しく理解していれば、5つの配列を追加して、ピクセルの合計が5のマスクを作成したいと思います。ここでは、Pythonとその構文とは関係のないいくつかの欠点があります。

まずが、Pythonでブール値がTrueFalse01のように定義されているだけで(あなたが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) 
    
あなたの ブール配列が本当にブール値になったら、 疑似コード(これは実際の作業コードです)のいずれかが問題なく動作します。その後

、あなたはすべてのマスクは、他の場所で交差し、FalseTrue値を持つタイプnp.bool(ブール)の配列resultで終わるかどう。あなたが本当に戻って01値に戻りたい場合は、あなただけの結果をダウンキャストできます0からFalseながら

result = result.astype(int) 

そしてTrue1にマップされます。同じようなことを行う他の方法は、次のようになります。

result = result * 1 

数値演算の種類はすべてブール値の配列を整数にキャストします。

(前述したように)さて、あなたは1もののおよび0配列が同じブール配列、ではないと&オペレータがいる限り(ブール配列のように動作終わるでしょう一口ごとの比較を行うことを、わかります彼らは10の値しか含んでいません)。したがって、

result = a & b & c & d 

はとbooleanアレイ(のみ10で)の両方integerのために働くことになります。しかし、boolean indexingのようなnumpyの多くの興味深い機能は、配列が本当にブール型(整数配列01はあなたが期待するものとはまったく異なっている)の場合にのみ機能するので、ブール型配列を使用することをお勧めします。

関連する問題