2016-10-06 157 views
1

我有具有带有不同长度的字符串单元阵列:将字符串转换的单元阵列与数阵列以矩阵

rr ={'1 2 5'; 
    '5 6 1'; 
    '12 56 2'; 
    '12 1'; 
    '343 2 -5 1 5'; 
    '1 5 3 2 0'} 

我想使基于所述字符串长度的数字的不同的矩阵,而不是字符串:

a1 = [1 2 5; 5 6 1; 12 56 2] 
a2 = [12 1] 
a3 = [343 2 -5 1 5; 1 5 3 2 0] 

我有一大套,我的实际数据将有许多基质如a1a2a3

+2

@EBH在编辑问题时,请注意删除不必要的内容,如“请帮助我”,不要忘记标题,如果有用,请添加相关标签。 – Adriaan

+2

请不要创建这些矩阵。你最终会使用可怕的函数,这会显着地混淆和减慢你的代码。保持原样,一个单元格阵列非常精细并且可以索引。你为什么还要这么多变数?你可以阅读为什么这是一个坏主意[我的答案](http://stackoverflow.com/questions/32467029/how-to-put-these-images-together/32467170#32467170),尤其是其中的参考资料。 – Adriaan

+0

我wana使用数字。我试图使用str2num,但它给我的rr单元格错误 – EkEhsaas

回答

2

这里有一种方法:

rr ={'1 2 5'; 
    '5 6 1'; 
    '12 56 2'; 
    '12 1'; 
    '343 2 -5 1 5'; 
    '1 5 3 2 0'} 

%// convert 
x = cellfun(@(x) sscanf(x,'%f'), rr,'uni',0) 
%// count 
n = cellfun(@numel,x) 
%// distribute 
s = accumarray(n,1:numel(n),[],@(ii) {x(ii)}) 
%// remove empty elements 
s = s(~cellfun('isempty',s)) 
%// assign 
m = cellfun(@(y) [y{:}].' ,s, 'uni',0) 

%// last step I'd try to avoid 
[a,b,c] = m{:}; 

a = 

    12  1 


b = 

    12 56  2 
    5  6  1 
    1  2  5 


c = 

    1  5  3  2  0 
    343  2 -5  1  5 

我建议你避免最后一步,并保持工作单元阵列m,因为你不知道在提前多少a1,a2 ...等等你需要的。结构也是一个不错的选择。

+0

@EkEhsaas不,这种方法是不可能的,你应该重新思考你使用多个变量名的方法 – thewaywewalk