2017-05-31 11 views
1

numpy bool配列をどのように上下に整列させることができますか? Justifyでは、真の値を取って、最初の値(正当化されている場合)または下の最初の値のどちらかになるように移動します。 (彼らがダウンして正当化される場合)Python:bool numpy配列のインデックスを上下に整列させる

[[False True True True True True] 
    [False False True True False True] 
    [False True False True False False 
    [True True True True False True]] 

は、だから私がダウンして上に示したブール配列の真の価値を正当化した場合、それは次のようになります。あなたが最初に移動するように

[[False False False True False False] 
[False True True True False True] 
[False True True True False True] 
[True True True True True True]] 
+0

あなたが「正当化」によって、正確に何を意味するのですか? – blacksite

+0

私は少し編集しました – bnicholl

答えて

2

は単に、真の値を押し下げ、各列に沿って、それを並べ替えるように同様に、あなたがダウンして、最後のリストを削除し、フロントでそれを置くことによって正当化することができます下位バージョンのために偽のものをアップしてください。上向きの場合は、ソートされたバージョンを反転させます。実装を披露する

サンプル実行 -

In [216]: mask 
Out[216]: 
array([[False, True, True, True, True, True], 
     [False, False, True, True, False, True], 
     [False, True, False, True, False, False], 
     [ True, True, True, True, False, True]], dtype=bool) 

In [217]: np.sort(mask,0) # Down justified 
Out[217]: 
array([[False, False, False, True, False, False], 
     [False, True, True, True, False, True], 
     [False, True, True, True, False, True], 
     [ True, True, True, True, True, True]], dtype=bool) 

In [218]: np.sort(mask,0)[::-1] # Up justified 
Out[218]: 
array([[ True, True, True, True, True, True], 
     [False, True, True, True, False, True], 
     [False, True, True, True, False, True], 
     [False, False, False, True, False, False]], dtype=bool) 
0

に見えますあなたが「正当化する」と呼んでいることをやり遂げるために、配列を背中に置きます。私はnumpy配列の要素を並べ替えるのは少し難しいと思うので、通常は標準的なpythonリストに変換し、要素を再配置し、numpy配列に変換し直します。

def up_justify(np_array): 
    list_array = list(np_array) 
    first_list = list_array.pop(0) #removes first list 
    list_array.append(first_list) #adds list to back 
    return np.array(list_array) 

もたらしながらそう

def down_justify(np_array): 
    list_array = list(np_array) 
    last_element = list_array.pop() 
    return np.array([last_element] + list_array) 
関連する問題