单元转换为双单元

5768次(最近30天)
史蒂文
史蒂文 2011年10月17日
你好,
比方说,一个是这样一个11×细胞
一个=
“0.000000”
'1.000000'
“2.000000”
“3.000000”
'4.000000'
“5.000000”
'6.000000'
'7.000000'
“8.000000”
'9.000000'
'10 0.000000'
我想将其转换双。如果我尝试B = cell2mat(一),我得到了以下错误:
???错误使用==>猫
参数方面并不一致。
错误在==>在85 cell2mat
m {n} =猫(1 c {: n});
然而,我知道我可以绕过它与2转换的循环:
i = 1:长度(a)
B(1)= str2num(cell2mat(A(I)));
结束
因此,我想知道是否有一种更简单的方法来使用简单的一步函数来实现这一点。
问候,
史蒂文
3评论
赫里西岛K.
赫里西岛K. 在2019年2月5日
@ayesha阿巴西太感谢你了!你帮了我!!!我有一个类似的问题!

登录评论。

接受答案

1月
1月 2011年10月17日
编辑:Mathworks支万博1manbetx持团队 2018年11月8日
要转换特征向量的电池阵列数字,你可以使用 str2double 功能。此功能是最简单的方法。
C = {“0.000000”'10 0.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 0.000000'};
S = sprintf ('%S *', C{:});
N = sscanf的(S,' % f *’);
不幸的是 sprintf 似乎忘了一个正确的预分配。该C-墨西哥是快4倍: FEX: CStr2String
S = CStr2String (C,'*');
N = sscanf的(S,' % f *’);
计时在2011B,酷睿2:
N = 100;
C = cell(1, n);
IC = 1:N;13 C {I} =的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 =零(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实现要好得多。
8的评论
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco 2021年6月28日
亲爱的简,
感谢你的小费。仍然是有用的,这些天。
最好的事物。

登录评论。

答案(1)

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

登录评论。

社区寻宝

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

开始狩猎!