我有一个函数在strfind
调用中使用cellfun
来查找单元数组中哪些字符串项与指定字符串匹配。例如:
cellfun( @(x) strfind( x , 'openmask'), fileNames, 'uniformoutput', false)
原始细胞矩阵是这样的:
fileNames = {'sub11att-openmask.txt', 'sub13det-masking', ...};
结果如下:
[10] [] [10] [] [9] []
我正在尝试找到一个将其转换为:
的函数10 0 10 0 9 0
使用cell2mat
我得到:
10 10 9
所以我现在必须使用它:
x(cellfun('isempty', x))={0};
cell2mat(x);
是否有比这更清洁的功能(即单线解决方案)?
感谢。
答案 0 :(得分:3)
即使有多次出现的搜索字符串,这也有效。如果有的话,它会找到第一个这样的事件,否则给出0
:
result = cellfun(@(x) sum(min(strfind(x, 'openmask'))), fileNames);
代码使用min
来保留第一个匹配项。这将给出一个数字或[]
。然后sum
将[]
转换为0
。
如果您希望保留最后一次,请将min
更改为max
或使用Sardar Usama的建议:
result = cellfun(@(x) max([0 strfind(x, 'openmask')]), fileNames);
答案 1 :(得分:1)
对于新变量y
:
y(~cellfun('isempty', x)) = cell2mat(x);
如果一个单元格中存在多个元素,它将会中断。