细胞转化为双细胞

5648视图(过去30天)
史蒂文
史蒂文 2011年10月17日
问候,
假设a是这样的11x1单元格
a=
'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}=cat(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*”);
不幸地 把格式数据写成串 似乎忘记了适当的预分配。这种C-Mex要快4倍: FEX:cstr2字符串 :
S=CSTR2字符串(C,‘*’);
N = sscanf(年代,“%f*”);
2011b, Core2Duo:
n = 100;
C=单元(1,n);
对于iC = 1: n;C{我}= sprintf (' % f ',我);终止
抽搐;对于我= 1:1000;N = cellfun(@(x)str2double(x), C);终止;toc
>>3.61秒
抽搐;对于i=1:1000;N=cellfun(@(x)sscanf(x,' % f ')(C);终止;toc
> > 3.01秒
抽搐;对于i=1:1000;N=str2double(C);终止;toc
> > 2.79秒
抽搐;对于i=1:1000;N=cellfun(@str2double,C);终止;toc
>>2.49秒
抽搐;对于我= 1:1000;
N = 0 (1100);对于j=1:100;N(j)=sscanf(C{j},' % f ');终止;
终止;toc
> > 1.40秒
抽搐;对于i=1:1000;N=sscanf(sprintf(“% s *”,C{:}),“%f*”);终止;toc
> > 0.14秒
抽搐;对于我= 1:1000;N = sscanf (CStr2String (C,‘*’),“%f*”);终止;toc
>>0.071秒
令我惊讶的是,C语言的完整实现是 更慢的 sscanf (sprintf ()) 看见 FEX:字符串要加倍 . Matlab的sscanf似乎比MSVC实现要好得多。
8评论
迪科朱塞佩·德甘
迪科朱塞佩·德甘 2021年6月28日
亲爱的简:,
谢谢你的提示。现在仍然有用。
最好的

登录以发表评论。

更多答案(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 Central中查找宝藏,了解社区如何帮助您!

开始狩猎!