Matlab数据形态转换的小tips(随时随手更)

目录

一、数值转成字符的一些状况(num2str和string的区别)

附:批量生成带题头的序列的代码

二、字符转成数值的一些状况(str2num和str2double的区别)


一、数值转成字符的一些状况(num2str和string的区别)

如果把数值向量转成字符型,可能大家很容易想到,num2str这个函数。

但是直接使用string函数,也是可以把数值向量转成字符的。而且string和num2str也是有很大区别的。具体见下:

首先生成一个1:5的序列

>> a=1:5

a =

     1     2     3     4     5

分别使用num2str和string

>> string(a)

ans = 

  1×5 string 数组

    "1"    "2"    "3"    "4"    "5"

>> num2str(a)

ans =

    '1  2  3  4  5'

使用string,获得是1行5列的字符串数组,打开来看是这样的:

但是使用num2str,会把这五个数加上分隔的空格合并起来,是这样的:

 

 num2str,生成的居然是char格式,甚至是1×13(我分析是5个数值和2*4个空格这样)。

这点值得区分。尤其是在生成带题头的序列时,比如”数据1,数据2,数据3,数据4“这种,必须使用string而不是想当然的觉得,数字转字符,就是num to str咯,这样的。

附:批量生成带题头的序列的代码

head=input('请输入序列都带的题头(字符格式)=','s'); 
n=input('请输入产生的序列长度(整数值格式)='); 
a=repmat(head,n,1);
b=string(1:n)';
ab=strcat(a,b)';
disp(ab)

运行出来就是这样的

二、字符转成数值的一些状况(str2num和str2double的区别)

先上经过观察后,通俗化的结论(可能不对,欢迎评论区总结更好的规律哈~):

str2num,只能处理一对引号里的内容,不过无论引号里有多少数值都可以。

str2double,可以处理有很多对对引号里的内容,不过每对引号里只能有一个数值。

有前人阐述过str2num和str2double的区别

matlab中 str2num 函数与 str2double 函数的区别_蔷薇的天空的博客-CSDN博客_str2num和str2double

不过这篇博文里面主要讨论的是char型字符的问题。

二者在官方的那里描述的区别是,str2num是转数值,str2double是转双精度。也有一部分人认为,str2num是针对矢量,str2double是针对标量,那么就这一方面进行测试。

1. 对于单数字的字符串,无论使用哪个,对小数点位数和成功与否没有影响,整数还是整数,小数点还是小数点,二者没有任何区别。

2. 但是,对于多”文本数字“组成的一个长字符串,str2num能够转成数值向量,str2double则会认成空值。

a =

    '1.2,6.6'

>> b=str2num(a);
>> c=str2double(a);
>> disp(b);disp(c)
    1.2000    6.6000

   NaN

3. 同时,对于多"文本数字"的字符向量,反而,str2doube能够转成数值向量,str2num则会失败

a = 

  1×2 string 数组

    "1.2"    "6.6"

>> b=str2num(a)
错误使用 str2num
输入必须为字符向量或字符串标量。
 
>> c=str2double(a)

c =

    1.2000    6.6000

4. 另外,对于app designer的文本框而言,

如果选择这种组件,那么即使是单文本数字转数值,只有str2double会成功,str2num会像3中一样报错:“输入必须为字符向量或字符串标量”。其储存的方式是这种字符串cell

不过如果选择这个组件,那么使用str2double和str2num都会成功。其储存的方式是字符串向量

综上,个人理解是,str2num只能处理一个字符串中的内容,无论里面有多少数字。

str2double只能处理单个字符串中的内容,无论字符串数组/元胞数组有多少个。

5. 那么对于每个cell里都是多字符向量数字的情况,比如这种:a是元胞数组,每个元素是文本型的向量。

a =

  1×2 cell 数组

    {["5.5"    "3.2"]}    {["2.3"    "7.1"]}

>> b=str2num(a)
错误使用 str2num
输入必须为字符向量或字符串标量。
 
>> c=str2double(a)

c =

   NaN   NaN

 无论str2num还是str2double,都无法一键将里面的内容转换成数值型。这种情况大概只能写循环,一个一个元胞元素地修改。

大概就是这样啦。大家用的时候面对报错和莫名其妙的空值,可以对照看一下是什么情况引起的,我遇到的基本上就是这5种情况,希望能有帮助~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值