2014-10-04 25 views
0

matlab函數sscanf返回一個可變大小的矩陣(或可能是一個單元陣列?),它可以分配給一個變量名稱矩陣嘗試將matlab矩陣分配給命名變量矩陣會產生'太多輸出參數'錯誤

>> clear all ; 
line = '1 2' ; 
[a, sz] = sscanf(line, '%d %d') ; 

看來,輸出矩陣a是一個列矩陣,其可以被轉置以形成1×2矩陣:

b = a' ; 

我想能夠將此分配給變量的矩陣名稱,就像我在前面的sscanf c中可以做的那樣所有。我想我能夠做到:

[c,d] = b ; 

但是這給我的錯誤:

Too many output arguments. 

從答案https://stackoverflow.com/a/23800927/189270它看起來像我可能能夠做到這一點通過變換矩陣a成單元陣列,但是,我似乎並沒有能夠找出這個正確的語法:

>> num2cell(a) 

ans = 

    [1] 
    [2] 

>> [c,d] = num2cell(a) 
Error using num2cell 
Too many output arguments. 

>> [c,d] = num2cell(a') 
Error using num2cell 
Too many output arguments. 

>> [c ; d] = num2cell(a) 
[c ; d] = num2cell(a) 
    | 

我可以通過分配到外地解決蠻力問題s bc一次一個索引到矩陣a。然而,我想這是一個常見的批量變量賦值類型(我在Mathematica中這樣做),所以我想知道我上面的嘗試有什麼問題,以及正確的matlab語法是什麼。

回答

0

你幾乎沒有錯。一旦你把你的數字轉換成單元格陣列中的單個單元格(通過num2cell),使用deal將單元格數組中的每個元素分配給相應的變量。因此:

%// Your code 
line = '1 2' ; 
[a, sz] = sscanf(line, '%d %d') ; 

%// New code! 
b = num2cell(a); 
[c,d] = deal(b{:}); 

這是我deal後得到:

c = 

    1 


d = 

    2 
+0

感謝。從交易文檔(例3)看來,[c,d] = b {:}也適用。 – 2014-10-04 13:25:46