我正在编写一个从单元格数组中删除一些值的函数,如下所示:
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)); 使用()进行索引将为您提供一个单元格子集,而使用{}会以
逗号分隔的列表形式返回单元
格子集的
内容 ,并且该示例中只有该
列表的第一个条目会left在left 。
您可以查看
此MATLAB文档以获取有关使用单元阵列的更多信息。
编辑:回应评论...
如果最终得到的
操作为您提供了一个逗号分隔的列表,则可以通过使用花括号将操作的各个元素放在单元格数组的单元格中。例如,您可以执行以下操作:
left = {cells{cellfun(@(i) ~isequal(item, i), cells)}}; 大括号的内部集创建一个逗号分隔的不等于item的cells内容的列表,然后外部集将该列表收集到一个单元格数组中。当然,这将产生与仅使用括号进行索引相同的结果,在这种情况下,这是更明智的方法。
如果你有一个返回多个输出参数的
函数 ,并且要收集这些多个值到一个单元阵列,那么它是一个比较复杂一点。您首先必须确定将获得多少个输出参数,或者可以使用
NARGOUT函数来获取所有可能的输出:
nOut = 3; %# Get the first three output arguments %# Or... nOut = nargout(@some_fcn); %# Get all the output arguments from some_fcn 然后,您可以通过执行以下操作将输出收集到1- nOut单元数组outArgs :
[outArgs{1:nOut}] = some_fcn(...); 应该注意的是,如果函数
的输出参数数量可变 ,则
NARGOUT将返回负值,因此在这种情况下,您必须nOut选择nOut的值。
更多&回答...