要将字符向量的单元格数组转换为数字,可以使用
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秒
令我惊讶的是,它在C语言中有一个完整的实现
慢
比
sscanf (sprintf ())
,请参阅
字符串到双倍
.Matlab的sscanf似乎比MSVC实现要好得多。