【发布时间】:2020-05-21 22:31:45
【问题描述】:
考虑这个示例:
sample = np.array([0, 1, 2, 3, 4])
我需要尽可能快的方法来生成sample 中每个值的二进制表示的最后 2 位数字的列表/数组。这样我就得到了二进制表示:
bin_sample = [bin(x) for x in sample]
>>> ['0b0', '0b1', '0b10', '0b11']
我像这样解析它们并得到正确的输出:
output = [bin(x)[-2:].replace('b','0') for x in sample]
>>> ['00', '01', '10', '11', '00']
问题是它太慢了,我正在处理大型数组,有什么建议吗? 谢谢
编辑:
处理5 million 元素需要大约5 seconds。我需要它来接~ 1 second
编辑#2:任何获得~ 500% 速度提升的优化都可以与之前的算法相媲美。
【问题讨论】:
-
问题是太慢了,我在处理大数组 能详细点吗?太慢有多慢?
-
@AMC 已编辑时间信息。
-
没有你的硬件细节的时间要求是没有意义的
-
@VictorDeleau 你可以推断,我需要将速度提高大约 500%,数字只是为了提供上下文。
-
bin(和相关方法)作用于一个数字,产生一个字符串。所以你被迭代困住了。要使用快速的numpy编译代码执行此操作,您必须使用数字方法,例如模数。您只生成 4 个不同的字符串,对吧?
标签: python arrays python-3.x numpy binary