使用二进制数将两个矩阵转换为一个矩阵

时间:2015-02-19 22:14:17

标签: matlab binary

A1A2是两个具有相同维度6000x2000的整数数组。

我希望通过以下步骤找到第三个矩阵B

for i=1:1:6000
    for j=1:2000

        a1 = fliplr(dec2binvec(A1(i,j),14));  % Convert A1(i,j) to a binary vector
        a2 = fliplr(dec2binvec(A2(i,j),32));  % Convert A2(i,j) to a binary vector

        b = [a1 a2];

        B(i,j) = sum(b.*2.^(numel(b)-1:-1:0));  % Convert b to decimal


    end
end

我的问题是找到B的计算时间

有没有办法避免循环以减少计算时间?

示例:

A1 = [2 3           A2 = [7 6
      4 5]                2 9]

A1(1,1) = 2A2(1,1) = 7

a1 = [0 0 0 1 0](例如5位)a2 = [0 0 0 1 1 1](例如6位)

b = [a1 a2] = [0 0 0 1 0 0 0 0 1 1 1]

B1(1,1) = sum(b.*2.^(numel(b)-1:-1:0)) = 135

3 个答案:

答案 0 :(得分:4)

使用您的示例:

A1 = [2 3;           
      4 5];            
A2 = [7 6;
      2 9];
B=bitshift(A1,6)+A2

输出:

B =

   135   198
   258   329

答案 1 :(得分:1)

如果我理解你的例子,你只需要移位A1(即乘以2的幂):

M = 5; %// not used actually
N = 6;
B = A1 * 2^N + A2;

在你的例子中,这给出了

B =
   135   198
   258   329

答案 2 :(得分:1)

我认为该示例包含您想要的内容。只需使用数学;)

A1 = [2 3;4,5]
A2=[7 6;2 9]
A1.*2^6+A2

请注意,双精度数最多可以保存53位而不会丢失精度。最新版本的matlab支持uint64。对于更长的数字,请检查vpa,但vpa会导致代码变慢。