简单的说,就是一个这样的数组,在matlab里面怎么转成数组
a='1,2,3,424,232'
看起来挺简单一个事情,就连vba这种东西都有函数能简单的处理这个
结果我只想到了以下两个异常拙劣的方法.....
方案1:
eval(['c=[',a,']'])
方案2:
>> b=regexp(a, '(\d+)', 'tokens')
b =
{1x1 cell} {1x1 cell} {1x1 cell} {1x1 cell} {1x1 cell}
>> str2double([b{:}])
ans =
1 2 3 424 232
方案1实在过于不正规了,而且很担心eval这类东西的效率。
至于方案2,因为regexp得到的是一个cell类型,使得后续的处理变得很麻烦。为了把它转成数组,用了[b{:}]这样的方法,同样可能会很影响效率。另外str2double这个函数,也是从matlab的若干str2xxx函数里面好不容易选出来的------str2num就不支持cell输入,总的来说cell这个类型虽然解决了很多问题,提高了语言的灵活性,但是可能是出于效率的问题,matlab的基本函数对它的支持还是相对有限的。
结果去版上问了一下,大佬同志马上提供了下面这种方法,确实很不错
sscanf(strrep(a,',',' '),'%f')
sscanf这个函数是个非常好用的东西,因为他能直接以字符串作为输入,所以很适合做简单的parse-----跟regexp的有点在这里也表现得很突出:它可以直接返回数组。
0 comments:
发表评论