将字符串的单元格数组转换为double数组

时间:2014-07-25 08:36:37

标签: matlab

我在Matlab中有一个看起来像这样的单元格:

'1406200719565'
'1406200719583'
'1406200719598'
'1406200730211'
'1406200730226'
'1406200730242'
'1406200731023'
'1406200731889'
'1406200732801'
'1406200733670'

我希望不将每个String转换为double,然后转换为double数组。我遵循了网上可以找到的各种方法,但都没有奏效。例如。我使用了推荐的here方法,但结果只是一个带NaN的向量。我还能做什么?

2 个答案:

答案 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%,但并不显着。