gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:01 25 4
gpt4 key购买 nike

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

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 就足够了。它将节省您的内存并使速度稍微快一些。

关于python - 通过符号将实值 numpy 数组转换为二进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32726701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com