如何查找单元格数组中最后一个非空元素的索引

Stu*_*PhD 4 arrays matlab vector cell-array

我初始化了一个很长的单元格数组(向量?)

train_labels = cell(16218, 1);
Run Code Online (Sandbox Code Playgroud)

这些将使用来自50个不同文件夹的文件填充,以确保文件在正确的位置编入索引,我需要写入的最后一个单元格数组的索引.

例如,在读取一个文件夹后,train_labels已达到索引5406.现在要从下一个文件夹中读取图像,必须将它们保存到下一个索引中5407.为了完成这项工作,我需要找到最后一个非空数组的位置train_labels.

由于简单find(train_labels,1,'last')不适用于单元阵列.我用过,cellfun但也没用.这是我试过的:

cellfun(@find, train_labels, 'last')
Error using cellfun
Input #3 expected to be a cell array, was char instead.
Run Code Online (Sandbox Code Playgroud)

非常感谢有关如何获取单元格数组的最后一个索引的任何指导.

谢谢

Div*_*kar 6

使用cellfun'isempty'选择-

last_non_empty_index = find(~cellfun('isempty',train_labels),1,'last')
Run Code Online (Sandbox Code Playgroud)

你也可以使用cellfun(@isempty..),但我相信一定要慢一点.这篇未记载的MATLAB博客文章已对此进行了详细讨论.

isempty是一个内置的,因此似乎是一个优化的实现.其他内置插件,在2014A的版本都可以cellfun是- ,'isreal','islogical','length','ndims','prodofsize',.'size' 'isclass'我希望这些也是快速实现.有关这些的更多信息,请参见可通过其访问的官方文档>> help cellfun.