如何从一个浮点数的 numpy 数组中创建一个标签的 numpy 数组?

4
例如,我有:
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循环在比较之前检查其类型来实现此目的,但这很复杂。有没有一种简单直接的方法来实现这个?

2个回答

2

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']

1
要创建一个包含三个这样的组的数组,你可以像这样做 -
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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接