2016-07-18 58 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') 
相关问题