问题
是否有一种智能方法可以添加不具有相同列长度的数组/向量,只需将零添加到太短的列中?我有包含多个变量的加法/减法。
这样:
a=[ 1; 2; 3]; b=[1;5]
a+b=[2; 5; 3]
或:
a-b=[0;-3;3]
而不是:
使用+时出错 矩阵维度必须一致。
我做了什么
b(numel(a),1) = 0;
这样可以正常工作,如果添加一些变量,但在重复多个变量时会非常烦人,特别是如果你不知道哪个变量最长。因此,问题是否有更容易的快速方法来添加不同的列长度。
修改
问题的确如此,如果有一种方法可以自动执行此操作,因为只有少数几个"变量
答案 0 :(得分:5)
您需要或多或少地手动执行此操作。例如:
s = [];
s(1,1:numel(a)) = a;
s(2,1:numel(b)) = b; % assigning a row (or column) automatically pads with zeros
% if needed. This works irrespective of which is bigger, a or b
s = sum(s,1); % sum along each column
如果你有几个变量,最好把它们放在一个单元格数组中,这样你就可以循环它们了:
c = {[1; 2; 3] [1;5] [10 20 30 40]}; % cell array of all "variables"
s = [];
for k = 1:numel(c);
s(k,1:numel(c{k})) = c{k}; % this zero-pads preceding cells' contents if needed
end
s = sum(s,1); % sum along each column
上述情况可能很慢,因为s
是动态重新分配的。您可以预分配,如下所示:
c = {[1; 2; 3] [1;5] [10 20 30 40]}; % cell array of all "variables"
m = max(cellfun(@numel, c)); % maximum vector size
s = zeros(numel(c), m); % preallocate and initiallize to zeros
for k = 1:numel(c);
s(k,1:numel(c{k})) = c{k}; % some entries maybe be left as zero
end
s = sum(s,1); % sum along each column
答案 1 :(得分:2)
a=[ 1; 2; 3]; b=[1;5];
if numel(b)~=numel(a)
if numel(b)<numel(a) % If b is shorter, extend it
b = [b; zeros(numel(a)-numel(b),1)];
else % If a is shorter, extend it
a = [a; zeros(numel(b)-numel(a),1)];
end
end
a+b
答案 2 :(得分:2)
A=[1, 2, 3]; B=[1,5];
[A,zeros(1,length(B)-length(A))]+[B,zeros(1,length(A)-length(B))]
ans =
2 7 3
[A,zeros(1,length(B)-length(A))]-[B,zeros(1,length(A)-length(B))]
ans =
0 -3 3
将它们粘贴在一个功能中,你就完成了