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

Transforming two matrices into one matrix using binary numbers

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

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

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

在您的示例中,这给出了

B =
   135   198
   258   329

我假设示例包含您想要的内容。简单地使用数学 ;)

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

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

使用你的例子:

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

输出:

B =

   135   198
   258   329