我必须在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
答案 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
这应检查两个阵列的长度,并将较小的阵列填充到较大阵列的大小。