我初始化了一个非常长的单元格数组(向量?)
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.
非常感谢有关如何获取单元格数组的最后一个索引的任何指导。
谢谢
答案 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'
访问的官方文档。