Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在MATLAB中有效地将大十进制数组转换为二进制数组?_Arrays_Matlab_Binary - Fatal编程技术网

Arrays 如何在MATLAB中有效地将大十进制数组转换为二进制数组?

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

下面是我现在使用的代码,其中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(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