【发布时间】:2021-11-17 18:56:05
【问题描述】:
如果我有一个 numpy 数组,其中每个元素代表例如一个 9 位整数,是否有一种简单的方法(可能没有循环)对其重新排序,结果数组元素每个都表示一个 8 位整数,在前一个元素的末尾添加了“丢失的位”在下一个元素的开头? 例如获取以下内容
np.array([0b100111000, 0b100101100, 0b110011100, 0b110010100]) # initial array in binarys
# convert to
np.array([0b10011100, 0b01001011, 0b00110011, 0b10011001, 0b01000000]) # resulting array
我希望我想要存档的内容是可以理解的。 附加信息,我不知道这是否有任何区别: 我所有的 9 位数字都以 msb beeing 1 开头(它们大于 255),最后两位总是 0,就像上面的例子一样。 我要处理的数组更大,包含数千个元素。
提前感谢您的帮助!
编辑:
我目前的(复杂的)解决方案如下:
import numpy as np
def get_bits(data, offset, leng):
data = (data % (1 << (offset + leng))) >> offset
return data
data1 = np.array([0b100111000, 0b100101100, 0b110011100, 0b110010100])
i = 1
part1 = []
part2 = []
for el in data1:
if i == 1:
part2.append(0)
part1.append(get_bits(el, i, 8))
part2.append(get_bits(el, 0, i)<<(8-i))
if i == 8:
i = 1
part1.append(0)
else:
i += 1
if i != 1:
part1.append(0)
res = np.array(part1) + np.array(part2)
【问题讨论】:
-
你目前是怎么做的?
-
@Copperfield 我已经添加了我当前的代码!
-
很好,我可以尝试用循环的东西或调整到任何尺寸的东西来改进我的,但看起来 Mad Physicist 为您提供了更好的解决方案
-
@Phaneroptera。您也享有投票的声誉。
-
@Copperfield 是的,我认为到目前为止,Mad Physicist 的表现优于我们的解决方案。但是感谢您的帮助!
标签: python arrays numpy bit-manipulation numpy-ndarray