我希望在参数数量的函数中包含 或 (或 任何 )(逻辑传入的矢量可以多于两个,数量可以不同。 例如,父函数可以创建
a=[1;0;0;0]
b=[0;1;0;0]
c=[0;0;0;1]
但下次可以添加
d=[0;0;1;0]
在这种情况下,我怎么得到它第一次给我X = [1; 1; 0; 1]而第二次给我X = [1; 1; 1; 1]?向量的数量最多可达20个,因此需要能够识别传入的向量数量。
答案 0 :(得分:9)
我就是这样做的:
function y = f(varargin)
y = any([varargin{:}], 2);
varargin
是一个带有函数输入参数的单元格数组。 {:}
生成comma-separated list个参数,[...]
(或horzcat
)水平连接它们。所以现在我们有一个矩阵,每列中有一个向量。沿第二维应用any
会得到所需的结果。
由于该函数包含单个语句,您还可以将其定义为anonymous function:
f = @(varargin) any([varargin{:}], 2);
示例运行:
>> f([1; 1; 0; 0], [1; 0; 0; 1])
ans =
4×1 logical array
1
1
0
1
>> f([1; 1; 0; 0], [1; 0; 0; 1], [0; 0; 1; 0])
ans =
4×1 logical array
1
1
1
1
答案 1 :(得分:2)
我确定你已经想过这个:
a=[1;0;0;0]
b=[0;1;0;0]
c=[0;0;0;1]
a|b|c % returns [1;1;0;1]
然而,对此有一个更简单的答案:
any([a,b,c,d],2);
在将变量输入any
函数之前,只需将上述变量连接起来即可轻松扩展。如果你想把它放到一个函数中,可以这样做:
function customOr(varargin)
any(cell2mat(varargin),2) % equivalent to any([varargin{:}],2);
end
customOr(a,b,c) % returns [1;1;0;1]
customOr(a,b,c,d) % returns [1;1;1;1]