Arrays 如何在MATLAB中有效地将大十进制数组转换为二进制数组?
下面是我现在使用的代码,其中decimal1是十进制值的数组,B是每个值的二进制位数:Arrays 如何在MATLAB中有效地将大十进制数组转换为二进制数组?,arrays,matlab,binary,Arrays,Matlab,Binary,下面是我现在使用的代码,其中decimal1是十进制值的数组,B是每个值的二进制位数: for (i = 0:1:length(decimal1)-1) out = dec2binvec(decimal1(i+1),B); for (j = 0:B-1) bit_stream(B*i+j+1) = out(B-j); end end 代码可以工作,但如果十进制数组的长度较大,则需要很长时间。有没有更有效的方法 bitstream = zeros(nele
for (i = 0:1:length(decimal1)-1)
out = dec2binvec(decimal1(i+1),B);
for (j = 0:B-1)
bit_stream(B*i+j+1) = out(B-j);
end
end
代码可以工作,但如果十进制数组的长度较大,则需要很长时间。有没有更有效的方法
bitstream = zeros(nelem * B,1);
for i = 1:nelem
bitstream((i-1)*B+1:i*B) = fliplr(dec2binvec(decimal1(i),B));
end
我认为这应该是正确的,而且要快得多,希望如此:
编辑:
我认为你的主要问题是你可能没有预先分配比特流矩阵
我测试了两个代码的速度,我发现你的速度比我的快不了多少,如果我们都预先分配了比特流,即使我有点矢量化了我的代码
如果我们不预先分配比特流,我的代码会快得多。这是因为您的代码比我的代码更频繁地重新分配矩阵
因此,如果您预先知道B,请使用您的代码,否则请使用我的代码。当然,两者都需要在运行时稍加修改以确定长度,这没有问题,因为可以在不使用B参数的情况下调用dec2binvec。中的函数与内置函数非常相似,因此,中讨论的一些备选方案可能对您有用。这里有一个选项可以尝试,使用函数:
这将给出与示例代码相同的结果,但速度应该更快
decimal1 = ...; %# Your array of decimal values
B = ...; %# The number of bits to get for each value
nValues = numel(decimal1); %# Number of values in decimal1
bit_stream = zeros(1,nValues*B); %# Initialize bit stream
for iBit = 1:B %# Loop over the bits
bit_stream(iBit:B:end) = bitget(decimal1,B-iBit+1); %# Get the bit values
end