A1
和A2
是两个具有相同维度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) = 2
和A2(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
答案 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
会导致代码变慢。