Seb*_*ian 5 arrays matlab bit-manipulation vectorization
我已经记录了包含位序列向量的数据,我想有效地重新排列.数据向量中的一个值可能如下所示:
bit0, bit1, bit2, ... bit7
Run Code Online (Sandbox Code Playgroud)
我想按照这个顺序重新安排这个位序列:
bit0, bit7, bit1, bit6, bit2, bit5, bit3, bit4
Run Code Online (Sandbox Code Playgroud)
如果我只有一个值,这将很好地通过:
sum(uint32(bitset(0,1:8,bitget(uint32(X), [1 8 2 7 3 6 4 5]))))
Run Code Online (Sandbox Code Playgroud)
不幸的是,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));
Run Code Online (Sandbox Code Playgroud)
如果可以的话,我会用de2biandbi2de来代替。