2015-08-19 54 views
1

我必须在for循环中一起添加多个数组,并且数组的大小非常大,所以有时我需要为数组x填充,有时需要填充数组y我如何动态地填充数组?用零填充数组动态 - Octave/Matlab

我知道如何手动填充(见下面的代码),但是如果数组x的大小或数组y的大小会有所不同,我该如何动态地进行填充?

x = [1 2 3 4 5 6]' 
y = [3 5 7 8]'; 

A = x + [y;zeros(2,1)]; 

This will result in A = [4 7 10 12 5 6]' 

PS:我使用八度3.8.1与像MATLAB

回答

3

找到最大长度并填充它们的差异。

L = max(length(x), length(y)); 
A = [x; zeros(L-length(x),1)] + [y; zeros(L-length(y),1)]; 

它可以很容易地扩展到超过两个向量:

L = max(length(x), length(y), length(z)); 
A = [x; zeros(L-length(x),1)] + [y; zeros(L-length(y),1)] + [z; zeros(L-length(z),1)]; 
0
x = [1 2 3 4 5 6]' 
y = [3 5 7 8]'; 

L1 = length(x); 
L2 = length(y); 
if L1>L2 
    A = x + [y;zeros(L1-L2,1)]; 
elseif L2>L1 
    A = x + [y;zeros(L2-L1,1)]; 
else 
    A = x + y; 
end 

这应该检查两个阵列和垫中较小的一个,以较大的一个的尺寸的长度。

1

其实,你不垫的阵列,以增加他们。你可以做这样的事情:

% Just some random arrays 
A = rand(1, 10); 
B = rand(1, round(rand(1,1)*10)+1); 

% Then add them 
if length(A) < length(B), C = A + B(1:length(A)); 
else C = B + A(1:length(B)); 

% Or... 
C = A(1:max(length(A), length(B))) + B(1:max(length(A), length(B))); 

我建议只是使用重要的元素。这意味着您不必在数组中添加零,而只需将较短的矢量中的所有元素与较大的矢量中的相同数量的元素相加即可。

零填充矢量的唯一原因是利用MATLAB的sum()函数来处理NxM维数的数组