2017-05-31 46 views
1

如何上下對齊numpy bool數組。通過證明,我的意思是取真值,並將它們移動,以使它們或者是頂部的第一個值(如果它們是正確的)或者底部的第一個值。 (如果他們是向下對齊)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

只需將它沿着每一列,其向下推動真實值進行排序證明,同時帶來了將錯誤的版本更新爲版本正確的版本。對於up-justified的,在排序後的版本上進行翻轉。

採樣運行向人們展示了實現 -

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)