2016-07-18 57 views
2

例如,我有如何從浮點數組中創建一個numpy的標籤數組?

arr=np.linspace(0,1,11) 

,我想,以紀念號碼n<0.25標籤"a"n>0.75標籤"c",標籤"b"之間的數字。其結果將是

array(['a', 'a', 'a', 'b', ..., 'c']) 

我試着像arr[arr<0.25]='a'的事情,但因爲會有與浮於下一個命令比較字符串它只能使用一次。在使用for循環比較之前,我可以通過檢查它的類型來實現這一點,但它很複雜。有沒有一種簡單的方法來實現這一目標?

回答

1

NumPy數組是均勻的。你必須爲標籤陣列設置類型

import numpy as np 
arr=np.linspace(0,1,11) 
lbl=np.empty((arr.shape), dtype=object) 
lbl[arr<.25]='a' 
lbl[(arr>=.25) & (arr <=.75)] = 'b' 
lbl[arr>.75]='c' 

print arr 
print lbl 

輸出:

[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ] 
['a' 'a' 'a' 'b' 'b' 'b' 'b' 'b' 'c' 'c' 'c'] 
2

爲了創建三個這樣的組陣列,你可以做這樣的事情 -

ID = (arr>0.75)*1 + (arr>=0.25) 
select_arr = np.array(['a','b','c']) 
out = select_arr[ID] 

採樣運行 -

In [64]: arr # Modified from sample posted in question to include 0.75 
Out[64]: 
array([ 0. , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.75, 
     0.9 , 1. ]) 

In [65]: ID = (arr>0.75)*1 + (arr>=0.25) 
    ...: select_arr = np.array(['a','b','c']) 
    ...: out = select_arr[ID] 
    ...: 

In [66]: out 
Out[66]: 
array(['a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c'], 
     dtype='|S1') 
相關問題