2016-03-31 21 views
0

私は2つのブール配列を持つデータセットを持っています。Pythonで別のブール値配列を使用してブール値配列をインデックスする

第1ブール配列は、どのデータポイントにエラーが付いているかを示し、MCMCルーチンでエラーをオンにするかどうかを指定するために使用されます。 2番目の配列は、各データ点に測定長さがあるかどうかを示します。

どのように私はBoolean_error == TrueまたはBoolean_error == FalseのいずれかでHas_length == Trueを持つオブジェクトで構成されるリストを持っていますように、私Has_lengthアレイによるインデックスBoolean_error配列をできますか?

は、ここで私は何をしようとしているの例です:

Boolean_error = [False True False True True False True False False False False False] 
Has_length = [True True True True False True True True True True True False] 

print Boolean_error[Has_length] 

>>> [False True False True False True False False False False] 
+1

正確に何が必要なのですか?私は理解していません – Milor123

+0

カンマが足りませんか? –

+0

pythonは 'list'sで' array'sではないことに注意してください(まあ、配列はありますが、まれです)。また、これは有効ではありませんPython –

答えて

2

ここに移動します。それはまさにあなたが必要とするものです。

errors_with_length = [b for b, l in zip(Boolean_error, Has_length) if l] 

zip()機能は、各反復可能にするたびに1つの値をとり、リスト内包表記は、誤ったHas_lengthをフィルタリングし、TrueあるもののためにBoolean_errorかかります。


もう一つは、より効率的なアプローチがそうのようなitertools.compress()を使用することです:

>>> list(itertools.compress(Boolean_error, Has_length)) 
[False, True, False, True, False, True, False, False, False, False] 
+0

これは私が必要とするものに対して完全に機能します。ありがとうございました! – morepenguins

0

あなただけのこれを行うための関数を書くことができます。

def return_list_with_only_known_length(error, length): 
    output = [] 
    for i, b in enumerate(length): 
     if b: 
      output.append(error[i]) 
    return output 
+0

長くて複雑な仲間。あなたの答えを編集してもうちょっと整頓されますが、まだ簡単な答えがあります。 – Bharel