将数字元胞数组转换为矩阵 (cell2mat),同时将空值转换为零

Convert cell array of numbers to matrix (cell2mat) while converting empties to zeros

我有一个函数,它在 cellfun 调用中使用 strfind 来查找元胞数组中的哪些字符串项与指定的字符串匹配。例如:

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

有没有比这更干净的函数(即单行解决方案)?

谢谢。

对于新变量 y:

y(~cellfun('isempty', x)) = cell2mat(x);

如果一个单元格中有一种以上的坚韧元素,它就会破裂。

即使查找的字符串多次出现,此方法也有效。如果有的话,它会找到第一个这样的事件,否则给出 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);