使用二进制数将两个矩阵转换为一个矩阵
Transforming two matrices into one matrix using binary numbers
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
如果我正确理解你的例子,你只需要移位 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
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
如果我正确理解你的例子,你只需要移位 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