如何在MATLAB中将点转换为数字?

时间:2015-06-26 15:29:36

标签: matlab file-io

我有一个格式为

的文本文件
2..4..6.7
.1.2.3.5.
34.7..89.

期望的输出:

A = 3x9 cell
 1x9 double: 200400607
 1x9 double: 010203040
 1x9 double: 340700890

我可以像这样读取文件

importdata('inputname.txt')

但是它们仍然是char类型的数组而不是double类型。

如何用数字替换字符?

1 个答案:

答案 0 :(得分:1)

使用之前的importdata选项:

data = importdata('inputname.txt');

现在,您可以通过字符串操作将所有.个字符替换为0。使用strrep执行此操作:

data = strrep(data, '.', '0');

我们得到:

data = 

    '200400607'
    '010203050'
    '340700890'

某些旧版本的MATLAB没有strrep。如果不这样做,请通过regexprep使用正则表达式为您完成此操作:

data = regexprep(data, '\.', '0');

现在,最后一项任务是将每个单元格转换为单独的数字,您可以使用cellfun并循环遍历每个单元格,并使用0的ASCII代码减去每个字符数组以获取你想要的数字数组。这将被类型转换为double数组,并通过减去0的ASCII代码,您将获得0到9之间的数字:

data = cellfun(@(x) x - '0', data, 'uni', 0);

我们得到:

>> celldisp(data)

data{1} =

     2     0     0     4     0     0     6     0     7



data{2} =

     0     1     0     2     0     3     0     5     0



data{3} =

     3     4     0     7     0     0     8     9     0

但是,如果你想要实际的完整数字本身而不是将其分成字符,那么只需使用str2double代替:

data = cellfun(@str2double, data);

你会得到:

>> data

data =

   200400607
    10203050
   340700890

请注意,上面的内容会删除每个数字的前导零,这有意义,因为它们不会对数字的解释添加任何有意义的内容。