将空格的单元格数组转换为矩阵(cell2mat),同时将空格转换为零
我有一个函数,它使用strfind
调用cellfun
来查找单元格数组中的哪些字符串项匹配指定的字符串。例如:将空格的单元格数组转换为矩阵(cell2mat),同时将空格转换为零
cellfun(@(x) strfind(x , 'openmask'), fileNames, 'uniformoutput', false)
的原始细胞矩阵是这样的:
fileNames = {'sub11att-openmask.txt', 'sub13det-masking', ...};
这样做的结果是这样的:
[10] [] [10] [] [9] []
我试图找到将转换功能这对:
10 0 10 0 9 0
Usin摹cell2mat
我得到:
10 10 9
所以,我必须现在使用此:
x(cellfun('isempty', x))={0};
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);
摆脱'sum'函数的想法:'result = cellfun(@(x)max([0 strfind(x,'openmask')]),fileNames)' –
Very花式手工@LuisMendo。谢谢你。顺便说一句,组织用户定义函数库的最佳方法是什么,以便我写入的任何MATLAB脚本访问?我想开始收集这样的功能,这些功能非常方便,我需要为各种事情使用一堆功能。谢谢! – teepee
@teepee嗯我不确定,我只是保留一个或两个文件夹与他们所有人。您可以在['startup'文件](https://es.mathworks.com/help/matlab/ref/startup.html)中添加一行[添加路径](https://es.mathworks。 com/help/matlab/ref/addpath.html)到这些文件夹。很高兴你找到有用的答案! –
对于一个新的变量y
:
y(~cellfun('isempty', x)) = cell2mat(x);
这将打破,如果细胞具有坚韧的多个元素。
定期为空细胞始终? –
@SardarUsama不,他们不是 – teepee