从混合单元格/字符串转换/创建矩阵的有效方法

时间:2018-04-29 15:52:59

标签: matlab

有时可能会有更多的字符串位于其他位置,因此我需要一种方法来查找单元格数组中的所有人。我有一个类似下面的单元格数组,我需要一种快速有效的方法来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]

1 个答案:

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