有时可能会有更多的字符串位于其他位置,因此我需要一种方法来查找单元格数组中的所有人。我有一个类似下面的单元格数组,我需要一种快速有效的方法来1)删除空列,2)转换包含字符串的单元格"#" #"#"之后的数字(6.504),最后3)创建或转换整个单元阵列到数据矩阵,如"数据"下面。有一种聪明的方法可以做到这一切吗?任何建议都非常感谢。
array ={
[47.4500] '' [23.9530] '' [12.4590]
[34.1540] '' [15.1730] '' [ 9.6840]
[45.2510] '' [23.3770] '' [13.0670]
[29.9350] '' [14.8680] '' '# 6.504'}
data =[
47.4500 23.9530 12.4590
34.1540 15.1730 9.6840
45.2510 23.3770 13.0670
29.9350 14.8680 6.5040]
答案 0 :(得分:1)
具有混合类型的列很难处理,但如果格式始终遵循正则表达式模式# \d+(?:\.\d+)
,则可以按以下步骤操作:
C = {
47.4500 '' 23.9530 '' 12.4590
34.1540 '' 15.1730 '' 9.6840
45.2510 '' 23.3770 '' 13.0670
29.9350 '' 14.8680 '' '# 6.504'
};
% Get rid of empty columns...
C(:,all(cellfun(@ischar,C))) = [];
% Convert numeric strings into numeric values...
C = cellfun(@(x)convert(x),C,'UniformOutput',false);
% Convert the cell matrix into a numeric matrix...
C = cell2mat(C);
convert
函数的定义如下:
function x = convert(x)
if (~ischar(x))
return;
end
x = str2double(strrep(x,'# ',''));
end