应用"或"功能到两个以上的向量Matlab

时间:2017-10-24 16:40:11

标签: matlab function vector any

我希望在参数数量的函数中包含 (或 任何 )(逻辑传入的矢量可以多于两个,数量可以不同。 例如,父函数可以创建

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个,因此需要能够识别传入的向量数量。

2 个答案:

答案 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]