2016-10-06 109 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