在matlab中扩展矩阵的智能方法

时间:2012-11-28 18:49:12

标签: matlab octave

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

2 个答案:

答案 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建议的两种方法之间,它的优点是如果你不愿意,你不必创建一个新的变量。