将NumPy数组转换为基于阈值的0或1

2024-05-23 16:54:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组:

a=np.array([0.1, 0.2, 0.3, 0.7, 0.8, 0.9])

我想要的是根据一个阈值将这个向量转换成一个二进制向量。 以threshold=0.5为例,大于0.5的元素转换为1,否则为0。
输出向量应如下所示:

a_output = [0, 0, 0, 1, 1, 1]

我该怎么做?


Tags: 元素outputthresholdnp二进制阈值数组array
2条回答

您可以使用sklearn.preprocessing module中的binarize

但是,只有当您希望最终值是二进制值(即“0”或“1”)时,此操作才有效。上面提供的答案也是大量的非二进制结果。

from sklearn.preprocessing import binarize

a = np.array([0.1, 0.2, 0.3, 0.7, 0.8, 0.9]).reshape(1,-1)
x = binarize(a) 
a_output = np.ravel(x)
print(a_output) 

#everything together 
a_output = np.ravel(binarize(a.reshape(1,-1), 0.5))

np.where

np.where(a > 0.5, 1, 0)
# array([0, 0, 0, 1, 1, 1])

astype

(a > .5).astype(int)
# array([0, 0, 0, 1, 1, 1])

np.select

np.select([a <= .5, a>.5], [np.zeros_like(a), np.ones_like(a)])
# array([ 0.,  0.,  0.,  1.,  1.,  1.])

特殊情况:np.round

如果数组值是介于0和1之间的浮动值,并且阈值为0.5,则这是最佳解决方案。

a.round()
# array([0., 0., 0., 1., 1., 1.])

相关问题 更多 >