[已解决] Matlab如何把cell转换成数值型

[复制链接]
wuhuawuhuawuhua 发表于 2009-12-2 22:55:10
如a(1X6的cell)
'1.025000e-06'        '1.050000e-06'        '1.075000e-06'        '1.100000e-06'        '1.125000e-06'        '1.150000e-06'

最佳答案


liuhuanjinliu 发表于 2010-1-20 11:32:43
原帖由 hgsz2003 于 2009-12-2 11:29 PM 发表
怎么会呢?

>> C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]}

C =

    [         1]    [1x3 double]
    [2x1 double]    [2x3 double]

>> M = cell2mat(C)

M =

     1     2     3     4
     5     6     7  ...


楼主的代码有问题,用你的方法不行的。楼主可能是用这种方法生成的cell数组:
>>a={'1.025000e-06'        '1.050000e-06'        '1.075000e-06'        '1.100000e-06'        '1.125000e-06'        '1.150000e-06'}
a =
    '1.025000e-06'    '1.050000e-06'    '1.075000e-06'    '1.100000e-06'    '1.125000e-06'    '1.150000e-06'

cell中的每个元素是一个含有数字的字符串。所以cell2mat就转换成了char类型的了。

用下面的方法:

  1. a={'1.025000e-06'        '1.050000e-06'        '1.075000e-06'        '1.100000e-06'        '1.125000e-06'        '1.150000e-06'};
  2. num=length(a);
  3. for ii=1:num
  4.    b(ii)=str2double(a{1,ii});
  5. end
  6. b

  7. b =
  8.   Columns 1 through 5
  9.                 1.025e-006                 1.05e-006                1.075e-006                  1.1e-006                1.125e-006
  10.   Column 6
  11.                  1.15e-006
  12. >>
复制代码

22 条回复


hanfeng210 发表于 2009-12-2 22:58:54
用cell2mat

wuhuawuhuawuhua 发表于 2009-12-2 23:11:11
这个我试过
是转化成char

hgsz2003 发表于 2009-12-2 23:29:31
怎么会呢?

>> C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]}

C =

    [         1]    [1x3 double]
    [2x1 double]    [2x3 double]

>> M = cell2mat(C)

M =

     1     2     3     4
     5     6     7     8
     9    10    11    12

>> ischar(M)

ans =

     0

meatbird 发表于 2009-12-3 13:10:41
eval(a{1})

homeofheart 发表于 2010-1-20 11:15:05
cell2mat只能适合元胞数组是n*n维的情况,我最近也遇到了这个问题,如下的程序可能会帮到你

% 将数字字符元胞数组转化成double
cell_str_list = {'1 2 3 4 5 6'; '1 3 4'};

a_str = char(cell_str_list);
a_str = a_str.';
a_str = (a_str(:)).';

b_str='';
for ii=1:length(a_str)
    b_str=strcat(b_str,strtok(a_str(ii))); %strtok除去分隔符
end
b_str;

for ii=1:length(b_str)
    b_double(ii)=str2double(b_str(ii));
end
b_double;

liuhuanjinliu 发表于 2010-1-20 11:32:43
原帖由 hgsz2003 于 2009-12-2 11:29 PM 发表
怎么会呢?

>> C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]}

C =

    [         1]    [1x3 double]
    [2x1 double]    [2x3 double]

>> M = cell2mat(C)

M =

     1     2     3     4
     5     6     7  ...


楼主的代码有问题,用你的方法不行的。楼主可能是用这种方法生成的cell数组:
>>a={'1.025000e-06'        '1.050000e-06'        '1.075000e-06'        '1.100000e-06'        '1.125000e-06'        '1.150000e-06'}
a =
    '1.025000e-06'    '1.050000e-06'    '1.075000e-06'    '1.100000e-06'    '1.125000e-06'    '1.150000e-06'

cell中的每个元素是一个含有数字的字符串。所以cell2mat就转换成了char类型的了。

用下面的方法:

  1. a={'1.025000e-06'        '1.050000e-06'        '1.075000e-06'        '1.100000e-06'        '1.125000e-06'        '1.150000e-06'};
  2. num=length(a);
  3. for ii=1:num
  4.    b(ii)=str2double(a{1,ii});
  5. end
  6. b

  7. b =
  8.   Columns 1 through 5
  9.                 1.025e-006                 1.05e-006                1.075e-006                  1.1e-006                1.125e-006
  10.   Column 6
  11.                  1.15e-006
  12. >>
复制代码
回复此楼

风松雨龄 发表于 2010-9-25 10:13:05
强人的内容  研究一下

brothers 发表于 2010-12-2 15:38:04

回复 7# liuhuanjinliu 的帖子

正好今天也遇到了这种问题,谢谢

小平hot 发表于 2010-12-18 09:25:01
恩,这个方法很好(cell2mat)

kelyen 发表于 2011-4-26 14:56:55
发信坛子里总是能找到很多好东西,真好真好

malliavin 发表于 2011-9-8 14:19:27
问题是,cell里的数据时要一样的才可用cell2mat,如果不一样呢?

qiu2069 发表于 2011-9-8 15:09:24
呵呵,学习了。

y天堂有罪 发表于 2012-4-8 17:05:06
给力哦 哈哈  谢谢大家

qhmhlirui 发表于 2013-3-22 12:18:18
homeofheart 发表于 2010-1-20 11:15
cell2mat只能适合元胞数组是n*n维的情况,我最近也遇到了这个问题,如下的程序可能会帮到你

% 将数字字符 ...

不错 楼主高手

rumaner2010 发表于 2013-5-25 09:22:50
是转换成double的,但是如果mat2cell怎么就转换到一个格子里面,而不是对应的行列,求帮助

Jasonhuang 发表于 2014-4-24 10:18:55
  1. str2double(sprintf(' %s',t{:}))
复制代码

张玉宇 发表于 2015-12-9 10:53:56
matlab要求每一行的数据长度要相同才行。

解决这个问题:

1、先把cell转变成char数组,在把他转变成数据类型。原理是转变成char之后的矩阵每行的长度是相同的。

[plain] view plaincopy
str2num(char(cdata))  

2、使用cellfun函数,第一个参数传递对每个cell单元使用的函数名,第二个参数是cell名。
[plain] view plaincopy
cellfun(@str2num, cdata)

eco0558 发表于 2016-10-20 17:03:40
张玉宇 发表于 2015-12-9 10:53
matlab要求每一行的数据长度要相同才行。

解决这个问题:

牛!!!
谢谢你解决了我的问题

了了_IfFsS 发表于 2017-2-17 09:48:47
先提取元胞数组内的char,再用str2double,方法很赞,受教:)

AnkiRay 发表于 2018-3-13 20:16:08
张玉宇 发表于 2015-12-9 10:53
matlab要求每一行的数据长度要相同才行。

解决这个问题:

牛,也成功的解决了我的问题,感谢感谢!

王永亮_WQHY7 发表于 2019-12-11 08:44:02
张玉宇 发表于 2015-12-9 10:53
matlab要求每一行的数据长度要相同才行。

解决这个问题:

楼主你好,我用了你的这个给方法,原来C是2020✖2的cell值,用过E = str2num(char(C)),E变成了4040✖1的double值了,我想问一下,怎么不让列发生变化呢?

guohf 发表于 2022-9-8 18:41:13
liuhuanjinliu 发表于 2010-1-20 11:32
楼主的代码有问题,用你的方法不行的。楼主可能是用这种方法生成的cell数组:
>>a={'1.025000e-06'       ...

解决了困扰已久的大问题,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表