细胞转化为双细胞
5,697次观看(过去30天)
显示旧的评论
问候,
假设a是像这样的11x1细胞
一个=
“0.000000”
“1.000000”
“2.000000”
“3.000000”
“4.000000”
“5.000000”
“6.000000”
“7.000000”
“8.000000”
“9.000000”
“10.000000”
我想把它转换成两倍。如果我尝试b=cell2mat(a),我得到以下错误:
???错误使用= = >猫
猫参数维度不一致。
错误In ==> cell2mat at 85
m {n} =猫(1 c {: n});
然而,我知道我可以绕过它与循环2转换为:
为i = 1:长度(a)
(我)= str2num (cell2mat((我)));
结束
因此,我想知道是否有一种更简单的方法来使用简单的一步函数来完成此任务。
问候,
史蒂文
接受的答案
1月
2011年10月17日
编辑:MathWorks支持团队
2018年11月8日
方法可将字符向量的单元格数组转换为数字
str2double
函数。这个函数是最简单的方法。
C = {“0.000000”;“10.000000”;“100000.000000”};
M = str2double (C)
的
cell2mat
函数将字符向量的单元格数组转换为字符数组,且所有字符向量的长度都相同。
cell2mat
还保留单元格内容的数据类型,因此不将字符转换为数字。
如果您需要您的代码快速,那么请使用以下代码。这段代码比
str2double
:
C = {“0.000000”;“1.000000”;“2.000000”;...
“3.000000”;“4.000000”;“5.000000”;“6.000000”
“7.000000”;“8.000000”;“9.000000”;“10.000000”};
S = sprintf (“% s *”C {:});
N = sscanf(年代,' % f *’);
S = CStr2String (C,‘*’);
N = sscanf(年代,' % f *’);
2011b, Core2Duo的时间:
n = 100;
C = cell(1, n);
为iC = 1: n;C{我}= sprintf (' % f ',我);结束
抽搐;为我= 1:1000;N = cellfun(@(x)str2double(x), C);结束;toc
> > 3.61秒
抽搐;为我= 1:1000;N = cellfun(@(x) sscanf(x,' % f '), C);结束;toc
> > 3.01秒
抽搐;为我= 1:1000;N = str2double (C);结束;toc
> > 2.79秒
抽搐;为我= 1:1000;N = cellfun(@str2double, C);结束;toc
> > 2.49秒
抽搐;为我= 1:1000;
N = 0 (1100);为j = 1:10 0;N (j) = sscanf (C {j},' % f ');结束;
结束;toc
> > 1.40秒
抽搐;为我= 1:1000;N = sscanf (sprintf (“% s *”, C {:}),' % f *’);结束;toc
> > 0.14秒
抽搐;为我= 1:1000;N = sscanf (CStr2String (C,‘*’),' % f *’);结束;toc
> > 0.071秒
9日评论
答案(1)
丹尼尔Shub
2011年10月17日
您的单元格数组似乎包含字符串而不是数字(双精度)。
B = cellfun(@(x)str2double(x), a);
6个评论
hello_world
2018年7月4日
它将所有的单元格条目(字符串)转换为
南
值。我已在以下网站提出一个问题:
//www.ru-cchi.com/matlabcentral/answers/408675-how-to-convert-a-csv-file-of-cell-array-type-to-double
你能调查一下吗?