Python 如何将概率列表转换为二进制值

Python 如何将概率列表转换为二进制值,python,pandas,numpy,Python,Pandas,Numpy,我有一个存储在NumPy数组中的0到1之间的概率列表。如何转换这些值,使任何大于0.5的值变为1,并且任何使用函数: model = np.array([0.123,0.789,0.456,0.654], dtype='float') np.vectorize(lambda x: int(x >= 0.5))(model) 将返回: 数组([0,1,0,1])如果没有任何附加库,您可以使用 model = [int(i > .5) for i in model] 您的第一个示例不

我有一个存储在NumPy数组中的0到1之间的概率列表。如何转换这些值,使任何大于0.5的值变为1,并且任何使用函数:

model = np.array([0.123,0.789,0.456,0.654], dtype='float')
np.vectorize(lambda x: int(x >= 0.5))(model)
将返回:


数组([0,1,0,1])
如果没有任何附加库,您可以使用

model = [int(i > .5) for i in model]

您的第一个示例不起作用,因为您不是在计算
model
数组(
model[i]
)的值,而是在计算迭代器的索引(
i

第二个示例不起作用,因为
i+1
实际上不会更改
i
的值。您需要的是:
i+=1

在第二个示例中还有一个细微的错误,即值恰好为
0.5
将保持不变,我认为这是不需要的

可以使用Python语法轻松地将数组转换为所需的格式:

model = [random.random() for _ in range(5)]
model = [1 if n >= 0.5 else 0 for n in model]
否则,这里有一个做同样事情的传统循环:

for i in range(len(model)):
    if model[i] < 0.5:
        model[i] = 0
    else:
        model[i] = 1
适用于范围内的i(len(model)):
如果模型[i]<0.5:
模型[i]=0
其他:
模型[i]=1
只需使用函数

将numpy导入为np
模型=np.圆形(模型)
使用方法如下:

list(np.where(np.array(model)>0.5,1,0))

此外,对上述/以下所有内容进行简单的%timeit比较:

In [24]: %timeit np.round(model)                                                                                                                     
12.9 µs ± 69.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [25]: %timeit list(np.where(np.array(model) > 0.5, 1, 0 ))                                                                                        
10.7 µs ± 26.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [26]: %timeit [int(i > .5) for i in model]                                                                                                        
1.28 µs ± 5.02 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

list(map(lambda x:int(x>0.5),model))
可能使用
np.round
model = [int(i > .5) for i in model]
model = [random.random() for _ in range(5)]
model = [1 if n >= 0.5 else 0 for n in model]
for i in range(len(model)):
    if model[i] < 0.5:
        model[i] = 0
    else:
        model[i] = 1
In [24]: %timeit np.round(model)                                                                                                                     
12.9 µs ± 69.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [25]: %timeit list(np.where(np.array(model) > 0.5, 1, 0 ))                                                                                        
10.7 µs ± 26.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [26]: %timeit [int(i > .5) for i in model]                                                                                                        
1.28 µs ± 5.02 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)