2017-09-05 77 views
1

我想寫一個簡單的實現在MATLAB堆棧的元素,我已經使用了一段代碼早些時候在我的工作類似於:MATLAB無法變量賦值給一個矩陣

A = zeros(5,3) 
[x, y] = size(A) 

此,如預期受讓人x到5,和y 3,根據需要,但是我試圖做類似的事情在我的棧的實現,它的throughing錯誤:

function [x, y] = pop(obj) 
     [x, y] = obj.Data(1, :); 
     obj.Data(1, :) = []; 
    end 

錯誤:索引不能產生多個結果。

我想先提取2×1矩陣,然後分配給它,但沒有工作,要麼:

function [x, y] = pop(obj) 
     top = obj.Data(1, :); 
     [x, y] = top; 
     obj.Data(1, :) = []; 
    end 

錯誤:有太多的輸出參數

這似乎很奇怪,我和解釋爲什麼發生這種情況會非常有趣,以及爲此尋求解決方法

謝謝。

+0

什麼'obj'是什麼?什麼是頂部出來?如果,如你所說,top是一個2×1矩陣,你必須用'x = top(1,1)'和'y = top(2,1)'提取這些值。 – marcoresk

+0

'obj'是一個2xn矩陣。 –

回答

2

這是因爲size是一個函數/操作,它可以返回多個輸出,但索引操作(例如Data(1,:))只能將一個輸出作爲數組返回,並且不能將數組視爲多個輸出。你可以做到以下幾點:

top = num2cell(obj.Data(1, :)); 
[x, y] = top{:}; %or [x, y] = top{1:2}; 

在這裏你轉換的陣列單元陣列和{:}您創建一個逗號分隔的列表,可以分配給多個變量。

或者,他們可以分別分配

x = obj.Data(1, 1); 
y = obj.Data(1, 2);