例如我有2x2矩阵,现在我必须将其左侧和右侧各增加到1列,然后每个顶部和底部增加到1行,现在我将有一个4x4矩阵,旧矩阵位于新中心。有没有办法快速完成而不是创建新的并将值从旧的转移到新的?
非常感谢
答案 0 :(得分:4)
无论你做什么,都必须为新阵列分配新内存。
另外,如果你的矩阵只有2x2,那么任何方法的速度都足够好。或者你也想处理更大的矩阵?然后,考虑以下两种方法的测试:
A = rand(5000);
% explicitly add zero vectors on all sides of A
tic;
B = [zeros(1, size(A,1)+2);
zeros(size(A, 2),1) A zeros(size(A, 2),1);
zeros(1, size(A,1)+2)];
toc
Elapsed time is 0.204940 seconds.
% create the output array and assign the A array to correct sub-matrix
tic
B = zeros(size(A)+2);
B(2:end-1,2:end-1) = A;
toc
Elapsed time is 0.102501 seconds.
答案 1 :(得分:2)
另一种选择是
B = padarray(A,[1,1],'both');
对于速度(至少对我的计算机来说),这是在angainor建议的两种方法之间,它的优点是如果你不愿意,你不必创建一个新的变量。