例如我有 2x2 矩阵,现在我必须将其左侧和右侧各增加到 1 列,然后将顶部和底部各增加到 1 行,现在我将有一个 4x4 矩阵,旧矩阵位于中心新的一个。有什么方法可以快速完成,而不是创建新的并将价值从旧的转移到新的?
非常感谢你
问问题
1800 次
2 回答
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.
于 2012-11-28T18:59:59.090 回答
2
另一种选择是
B = padarray(A,[1,1],'both');
对于速度(至少对于我的计算机而言),这是在 angainor 建议的两种方法之间,它的优点是如果您不想创建新变量,则不必创建新变量。
于 2012-11-28T21:19:20.190 回答