0

例如我有 2x2 矩阵,现在我必须将其左侧和右侧各增加到 1 列,然后将顶部和底部各增加到 1 行,现在我将有一个 4x4 矩阵,旧矩阵位于中心新的一个。有什么方法可以快速完成,而不是创建新的并将价值从旧的转移到新的?
非常感谢你

4

2 回答 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 回答