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

时间:2015-08-19 13:34:46

标签: 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

3 个答案:

答案 0 :(得分: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)];

答案 1 :(得分: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)));

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

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

答案 2 :(得分: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

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