Arrays 动态零填充阵列-倍频程/Matlab

Arrays 动态零填充阵列-倍频程/Matlab,arrays,matlab,octave,padding,Arrays,Matlab,Octave,Padding,我必须在for循环中添加多个数组,数组的大小非常大,因此有时我需要为数组x填充,有时我需要为数组y填充。如何动态填充数组 我知道如何手动填充(请参见下面的代码),但如果数组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:我使用的是octave 3.8.1,类似于matlab x = [1 2 3

我必须在for循环中添加多个数组,数组的大小非常大,因此有时我需要为数组x填充,有时我需要为数组y填充。如何动态填充数组

我知道如何手动填充(请参见下面的代码),但如果数组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:我使用的是octave 3.8.1,类似于matlab

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
这应该检查两个阵列的长度,并将较小的阵列填充到较大阵列的大小


这应该检查两个阵列的长度,并将较小的阵列填充到较大阵列的大小。

找到最大长度,然后将两者的差值填充

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)];

找到最大长度,并用差值填充它们

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)];

实际上,您不必为添加数组而填充数组。您可以执行以下操作:

% 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)));
%只是一些随机数组
A=兰特(1,10);
B=兰特(1,圆形)(兰特(1,1)*10)+1);
%然后添加它们
如果长度(A)<长度(B),C=A+B(1:长度(A));
否则C=B+A(1:长度(B));
%或者。。。
C=A(1:max(长度(A)、长度(B))+B(1:max(长度(A)、长度(B)));
我的建议是只使用重要的元素。这意味着您不必在数组中添加零,只需将短向量的所有元素与较大向量中相同数量的元素相加即可


对向量进行零填充的唯一原因是利用MATLAB的
sum()
函数对NxM维数组进行填充。

实际上,您不必为添加数组而填充数组。您可以执行以下操作:

% 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)));
%只是一些随机数组
A=兰特(1,10);
B=兰特(1,圆形)(兰特(1,1)*10)+1);
%然后添加它们
如果长度(A)<长度(B),C=A+B(1:长度(A));
否则C=B+A(1:长度(B));
%或者。。。
C=A(1:max(长度(A)、长度(B))+B(1:max(长度(A)、长度(B)));
我的建议是只使用重要的元素。这意味着您不必在数组中添加零,只需将短向量的所有元素与较大向量中相同数量的元素相加即可

对向量进行零填充的唯一原因是为了将MATLAB的
sum()
函数用于NxM维数组