我在Matlab中有一个看起来像这样的单元格:
'1406200719565'
'1406200719583'
'1406200719598'
'1406200730211'
'1406200730226'
'1406200730242'
'1406200731023'
'1406200731889'
'1406200732801'
'1406200733670'
我希望不将每个String转换为double,然后转换为double数组。我遵循了网上可以找到的各种方法,但都没有奏效。例如。我使用了推荐的here方法,但结果只是一个带NaN的向量。我还能做什么?
答案 0 :(得分:5)
你试过这个:
S={'1406200719565'
'1406200719583'
'1406200719598'
'1406200730211'
'1406200730226'
'1406200730242'
'1406200731023'
'1406200731889'
'1406200732801'
'1406200733670'}
cellfun(@str2num, S)
答案 1 :(得分:1)
似乎没有理由使用cellfun。 str2double已经过矢量化并与单元格一起使用。但是,当比较性能时,cellfun实际上显着(即可测量)更快!
S={'1406200719565'
'1406200719583'
'1406200719598'
'1406200730211'
'1406200730226'
'1406200730242'
'1406200731023'
'1406200731889'
'1406200732801'
'1406200733670'}
X = zeros(10,1);
tic
for ii = 1:20000
X=str2double(S);
end
toc
输出:经过的时间是3.908324秒。
tic
for ii = 1:20000
X = cellfun(@str2double, S);
end
toc
输出:经过的时间是3.357150秒。
正如@Divakar所建议的那样,使用更大的单元格阵列进行比较,强调使用cullfun提高性能:
S=cellstr(num2str(randi(150000,10000,1)));
X = zeros(150000,10000);
tic
X=str2double(S);
toc
tic
X = cellfun(@str2double, S);
toc
导致:
直接:经过的时间 0.778316秒。
使用 cellfun :经过的时间 0.173727秒。
注意强> 使用str2num或str2double几乎没有区别。 str2num似乎慢了3%,但并不显着。