我记录了包含位序列向量的数据,我想对其进行有效的重新排列。数据向量中的一个值可能看起来像这样:
bit0, bit1, bit2, ... bit7
我想将此位序列重新排列为以下顺序:
bit0, bit7, bit1, bit6, bit2, bit5, bit3, bit4
如果我只有一个值,则可以通过以下方法很好地工作:
sum(uint32(bitset(0,1:8,bitget(uint32(X), [1 8 2 7 3 6 4 5]))))
不幸的是,bitset和bitget无法处理位序列的向量。由于我有一个相当大的数据集,因此我对有效的解决方案很感兴趣。
任何帮助,将不胜感激,谢谢!
最佳答案
dec2bin
和bin2dec
可以处理向量,您可以一次输入所有数字并置换矩阵:
input=1:23;
pattern = [1 8 2 7 3 6 4 5];
bit=dec2bin(input(:),numel(pattern));
if size(bit,2)>numel(pattern)
warning('input numbers to large for pattern, leading bits will be cut off')
end
output=bin2dec(bit(:,pattern));
如果有的话,我会改用
de2bi
和bi2de
。