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

时间:2014-10-23 16:00:27

标签: arrays matlab vector cell-array

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

train_labels = cell(16218, 1);

将使用来自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.

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

谢谢

1 个答案:

答案 0 :(得分:6)

cellfun'isempty'选项 -

一起使用
last_non_empty_index = find(~cellfun('isempty',train_labels),1,'last')

你也可以使用cellfun(@isempty..),但我相信一定要慢一点。这已在此Undocumented MATLAB Blog post中详细讨论过。

isempty是一个内置的,因此似乎是一个优化的实现。 2014A版cellfun中提供的其他内置插件包括 - 'isreal''islogical''length''ndims''prodofsize',{{ 1}},'size'。我希望这些也是快速实现。有关这些内容的更多信息,请参见可通过'isclass'访问的官方文档。