Vectorised cell search and logical indexing
2 次查看(过去 30 天)
显示 更早的评论
Hello, I would like to know if there is a vectorised/cellfun/better approach to the loop below:
% Find Key 4 in block_new{:}(1,1)
Key4 = '=x';
index4 = cellfun(@(x)regexp(x, Key4), block_new, 'UniformOutput', false);
Logic = false(length(index4),1);
for i = 1 : length(index4)
Logic(i) = ~isempty(cell2mat(index4{i}(1,1)));
end
index4 = Logic;
block_set = block_new(:,index4);
Where the cells in the 1 X m cell array, block_new are in themselves cell arrays of various sizes.
I have already tried the following:
find(~cellfun(@isempty,index4{:}(1,1)))
Thanks in advance.
3 个评论
Jan
2017-9-21
~isempty(cell2mat(index4{i}(1,1)));
If the output of cell2mat is empty, the cell must have been empty already. What about:
~isempty(index4{i}{1})
instead?
Please post a relevant input array.
回答(1 个)
Jos (10584)
2017-9-21
regex can work on a cell array of strings directly:
block_new = {'abcd=x','abcd','a=xbc=x'}
index4 = regexp('block_new','=x')
3 个评论
Jos (10584)
2017-9-21
Some cells are cell array of strings themselves? Kind of complicated data structure ...
Cedric
2017-9-21
编辑:Cedric
2017-9-21
As mentioned by Jan, it would be simpler if you would attach a sample data set. Also, if you could describe in words what you are trying to achieve, that could help because you are doing a lot of operations that seem unnecessary (but that may in fact be necessary depending the final purpose).
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Cell Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!