首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MATLAB中将点转换成数字?

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

Stack Overflow用户
提问于 2015-06-26 15:29:35
回答 1查看 43关注 0票数 1

我有一个有格式的文本文件

代码语言:javascript
复制
2..4..6.7
.1.2.3.5.
34.7..89.

期望产出:

代码语言:javascript
复制
A = 3x9 cell
 1x9 double: 200400607
 1x9 double: 010203040
 1x9 double: 340700890

我可以像这样读文件

代码语言:javascript
复制
importdata('inputname.txt')

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

我如何用数字代替字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-26 15:35:56

使用您以前使用的importdata选项:

代码语言:javascript
复制
data = importdata('inputname.txt');

现在,您可以通过字符串操作将所有.字符替换为0。使用strrep可以这样做:

代码语言:javascript
复制
data = strrep(data, '.', '0');

我们得到:

代码语言:javascript
复制
data = 

    '200400607'
    '010203050'
    '340700890'

有些旧版本的MATLAB没有strrep。如果没有,则通过regexprep使用正则表达式为您执行以下操作:

代码语言:javascript
复制
data = regexprep(data, '\.', '0');

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

代码语言:javascript
复制
data = cellfun(@(x) x - '0', data, 'uni', 0);

我们得到:

代码语言:javascript
复制
>> 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

代码语言:javascript
复制
data = cellfun(@str2double, data);

你会得到:

代码语言:javascript
复制
>> data

data =

   200400607
    10203050
   340700890

请注意,上面将删除对每个数字的任何前导零,这是有意义的,因为这些没有添加任何有意义的数字解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31076997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档