如果 MATLAB 函数返回可变数量的值,我如何才能将所有这些值作为元胞数组获取?

2023-11-24

我正在编写一个函数来从元胞数组中删除一些值,如下所示:

function left = remove(cells, item);
left = cells{cellfun(@(i) ~isequal(item, i), cells)};

但是当我运行这个时,left仅具有第一个值,因为使用逻辑数组调用 cells{} 会返回所有匹配的单元格作为单独的值。如何将这些单独的返回值分组到单个元胞数组中?

另外,也许已经有一种方法可以从元胞数组中删除给定的项目?我在文档中找不到它。


你必须使用()代替{}索引单元格:

function left = remove(cells, item)
  left = cells(cellfun(@(i) ~isequal(item, i), cells));

Using ()用于索引将为您提供单元格的子集,同时使用{}将返回contents细胞子集作为逗号分隔的列表,并且只有该列表的第一个条目才会被放入left在你的例子中。

您可以查看这个 MATLAB 文档有关使用元胞数组的更多信息。


编辑:回复评论...

如果你有一个手术最终会得到一个以逗号分隔的列表,您可以通过用花括号括起来操作,将列表的各个元素放入元胞数组的单元格中。对于您的示例,您可以这样做:

left = {cells{cellfun(@(i) ~isequal(item, i), cells)}};

内部大括号组创建一个以逗号分隔的内容列表cells不等于item,然后外部集合将该列表收集到元胞数组中。当然,这将给出与仅使用括号进行索引相同的结果,在这种情况下这是更明智的方法。

如果你有一个function返回多个输出参数,并且您希望将这些多个值收集到元胞数组中,那么情况会稍微复杂一些。您首先必须决定将获得多少个输出参数,或者您可以使用该函数NARGOUT获得所有可能的输出:

nOut = 3;                   %# Get the first three output arguments
%# Or...
nOut = nargout(@some_fcn);  %# Get all the output arguments from some_fcn

然后你可以将输出收集到一个 1-by-nOut单元阵列outArgs通过执行以下操作:

[outArgs{1:nOut}] = some_fcn(...);

应当指出的是NARGOUT如果函数有一个,将返回一个负值可变数量的输出参数,所以你必须选择的值nOut在这种情况下你自己。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 MATLAB 函数返回可变数量的值,我如何才能将所有这些值作为元胞数组获取? 的相关文章

随机推荐