将"或"函数应用于两个以上的向量Matlab

Mar*_*ary 6 matlab function vector any

我希望在函数中包含(或任何),其中传入的参数(逻辑向量)的数量可以多于两个并且可以在数量上变化.例如,父函数可以创建

a=[1;0;0;0]
b=[0;1;0;0]
c=[0;0;0;1]
Run Code Online (Sandbox Code Playgroud)

但下次可能会补充

d=[0;0;1;0]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何得到它,第一次给我X = [1; 1; 0; 1],第二次给我X = [1; 1; 1; 1]?向量的数量可以达到20,因此需要能够识别传递了多少向量.

Lui*_*ndo 9

我就是这样做的:

function y = f(varargin)
y = any([varargin{:}], 2);
Run Code Online (Sandbox Code Playgroud)

varargin是一个带有函数输入参数的单元格数组.{:}生成这些参数的逗号分隔列表,并[...](或horzcat)水平连接它们.所以现在我们有一个矩阵,每列中有一个向量.any沿第二维应用给出了期望的结果.

由于该函数包含单个语句,您还可以将其定义为匿名函数:

f = @(varargin) any([varargin{:}], 2);
Run Code Online (Sandbox Code Playgroud)

示例运行:

>> 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
Run Code Online (Sandbox Code Playgroud)