Skip to main content
 首页 » 编程设计

python之通过符号将实值 numpy 数组转换为二进制数组

2025年05月04日13mfryf

我正在寻找一种快速计算以下内容的方法:

import numpy as np 
a = np.array([-1,1,2,-4,5.5,-0.1,0]) 

现在我想将 a 转换为一个二进制值数组,这样 a 的每个正项都为 1,否则为 0。所以我想要的结果是这样的:

array([ 0.,  1.,  1.,  0.,  1.,  0.,  0.]) 

实现这一目标的一种方法是

np.array([x if x >=0 else 0 for x in np.sign(a)]) 
array([ 0.,  1.,  1.,  0.,  1.,  0.,  0.]) 

但我希望有人能指出一个更快的解决方案。

%timeit np.array([x if x >=0 else 0 for x in np.sign(a)]) 
100000 loops, best of 3: 11.4 us per loop 

编辑:从答案中找出最好的解决方案

%timeit (a > 0).astype(int) 
100000 loops, best of 3: 3.47 us per loop 

请您参考如下方法:

你可以使用掩码来做到这一点:

(a > 0).astype(int)

我不知道如何正确使用timeit,但即使

import numpy as np 
from datetime import datetime 
n = 50000000 
a = np.random.rand(1, n).ravel() 
startTime = datetime.now() 
np.array([ x if x >=0 else 0 for x in np.sign(a)]) 
print datetime.now() - startTime 
 
startTime = datetime.now() 
(a > 0).astype(int) 
print datetime.now() - startTime 
pass 

显示 26 秒 与 0.5 秒 的显着差异。

P.S. 根据您的评论

I'll be computing distances, like hamming

您实际上不需要整数数组,a > 0 就足够了。它将节省您的内存并使速度稍微快一些。