How to find a certain string in a cell with variable size
1 view (last 30 days)
Show older comments
Suppose we have a varying sized cell array, e.g:
TempCell = {{'a1','a2'},{'a3','a4','a8','a7'},{'a2','a1'},{'a9'}};
Now, how to find indices of a certain string (like 'a1') in TempCell and remove those arrays which contain that specific string?:
TempCell = {{'a3','a4','a8','a7'},{'a9'}};
I assume Cellfund would be of use, but I could not find any efficient way to use it (I mean without any loop). Any help is more than welocme!
0 Comments
Accepted Answer
Stephen23
on 25 Oct 2015
Edited: Stephen23
on 25 Oct 2015
>> TempCell = {{'a1','a2'},{'a3','a4','a8','a7'},{'a2','a1'},{'a9'}};
>> out = TempCell(~cellfun(@(c)any(strcmp('a1',c)),TempCell));
>> out{:}
ans =
'a3' 'a4' 'a8' 'a7'
ans =
'a9'
Using a loop will actually be more efficient (and faster), but cellfun is much more compact code.
2 Comments
Stephen23
on 25 Oct 2015
Edited: Stephen23
on 25 Oct 2015
Usually a loop is faster, but cellfun is often neater.
You can try cellfun('mean',...) if you wish to, but this is not supported by the cellfun documentation: " Backward Compatibility cellfun accepts function name strings for function func, rather than a function handle, for these function names: isempty, islogical, isreal, length, ndims, prodofsize, size, isclass. Enclose the function name in single quotes." For these (and only these) listed operations one can call cellfun with the string: this is faster than calling cellfun with a function handle.
More Answers (1)
Jan
on 25 Oct 2015
And the llop method:
pattern = 'a1';
TempCell = {{'a1','a2'},{'a3','a4','a8','a7'},{'a2','a1'},{'a9'}};
remove = false(size(TempCell));
for k = 1:numel(TempCell)
remove = any(strcmp(TempCell{k}, pattern));
end
TempCell(remove) = [];
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!