将"or"函数应用于两个以上的向量Matlab
Applying "or" function to more than two vectors Matlab
我希望包括或(或任何) 在一个函数中,其中传入的参数(逻辑向量)的数量可以超过两个并且数量可以变化。
例如,父函数可以创建
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],第二次给我 Y=[1;1;1;1]?矢量的数量可能多达 20 个,因此它需要能够识别传入的矢量数量。
我会这样做:
function y = f(varargin)
y = any([varargin{:}], 2);
varargin
is a cell array with the function input arguments. {:}
generates a comma-separated list of those arguments, and [...]
(or horzcat
) concatenates them horizontally. So now we have a matrix with each vector in a column. Applying 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
我相信你已经想到了:
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]
我希望包括或(或任何) 在一个函数中,其中传入的参数(逻辑向量)的数量可以超过两个并且数量可以变化。 例如,父函数可以创建
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],第二次给我 Y=[1;1;1;1]?矢量的数量可能多达 20 个,因此它需要能够识别传入的矢量数量。
我会这样做:
function y = f(varargin)
y = any([varargin{:}], 2);
varargin
is a cell array with the function input arguments. {:}
generates a comma-separated list of those arguments, and [...]
(or horzcat
) concatenates them horizontally. So now we have a matrix with each vector in a column. Applying 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
我相信你已经想到了:
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]