动态用零填充数组 - Octave / Matlab

Padding arrays with zeros dynamically - Octave / Matlab

我必须在 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)];

实际上,您 不需要 填充数组才能添加它们。你可以这样做:

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

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

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