我有一个大的numpy数组(即大约2 ** 32个位置)的64位无符号整数,我想在这个数组中的每个整数中复制一个位(可以在0到63之间变化)。
示例:
array([ 0, 5, 2, 7 ])
0
二进制输入是
000 101 010 111
操作完成后,我希望这些位为
0000 1011 0100 1111
array([ 0, 11, 4, 15 ])
如前所述,我的阵列非常庞大,所以我更倾向于使用最少数量的临时/辅助阵列。
我试图在谷歌甚至Bit Twiddling Hacks中找到与它接近的东西而没有运气。
提前致谢!
答案 0 :(得分:1)
天真的方式对我来说已经非常有效了:
if(condition){x=this}else{x=that}
我按如下方式运行代码:
mask = -1 << (pos + 1)
(x << 1) & mask | x & ~mask
位复制耗时0.95秒(几次运行的平均值)。 由于内存问题,我只使用了2个 27 条目。但我们可以预期2 32 条目的时间为2 32-27 ×0.95 s = 2 5 ×0.95 s = 32×0.96 s = 30.4 s 。