将数字的单元格数组转换为矩阵(cell2mat),同时将空格转换为零

时间:2017-07-07 21:05:13

标签: arrays matlab cell-array

我有一个函数在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);

是否有比这更清洁的功能(即单线解决方案)?

感谢。

2 个答案:

答案 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);

如果一个单元格中存在多个元素,它将会中断。