2016-07-18 15 views
2

は例えば、私はnumpy配列のfloatからnumpyのラベル配列を作成するにはどうすればよいですか?

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

を持っていると私は数字にn<0.25ラベル"a"n>0.75ラベル"c"、ラベル"b"間の数字をマークしたいです。結果は私がarr[arr<0.25]='a'のようなものを試してみましたが、次のコマンドのフロートと比較する文字列が存在しますので、それは一度だけ動作します

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

だろう。 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

このような3つのグループの配列を作成するために、あなたはこのような何か行うことができます -

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') 
関連する問題