单元转换为双单元

6933次浏览(过去30天)
史蒂文
史蒂文 2011年10月17日
评论道: Nishaban P.K.2020年4月21日
问候,
假设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((我)));
结束
因此,我想知道是否有一种更简单的方法来使用简单的一步函数来实现这一点。
问候,
史蒂文
3评论
Chrysi K。
Chrysi K。 2019年2月5日
@ayesha abbassi非常感谢!!你帮助我! !我也遇到过类似的问题!

登录评论。

接受的答案

1月
1月 2011年10月17日
编辑:MathWorks支金宝app持团队 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 *’);
不幸的是 sprintf 似乎忘记了适当的预分配。这种C-Mex要快4倍: FEX: CStr2String
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实现要好得多。
7评论
Nishaban P.K.
Nishaban P.K. 2020年4月21日
先生,我使用str2double函数,它返回一些二进制值,比如'00000111'到111。为什么?

登录评论。

答案(1)

丹尼尔Shub
丹尼尔Shub 2011年10月17日
它显示单元格数组包含字符串而不是数字(双精度)。
B = cellfun(@(x)str2double(x), a);
6个评论
hello_world
hello_world 2018年7月4日
@Daniel Shub:它将所有单元格条目(字符串)转换为 值。我在以下网站提出了一个问题: //www.tatmou.com/matlabcentral/answers/408675-how-to-convert-a-csv-file-of-cell-array-type-to-double
你能调查一下吗?

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!