MATLAB无法将变量分配给矩阵的元素

MATLAB无法将变量分配给矩阵的元素,matlab,matrix,Matlab,Matrix,我试图在MATLAB中编写一个堆栈的简单实现,我在之前的工作中使用了一段代码,类似于: A = zeros(5,3) [x, y] = size(A) 正如预期的那样,这会根据需要将x分配给5,将y分配给3,但是我在堆栈实现中尝试了类似的操作,但遇到了一个错误: function [x, y] = pop(obj) [x, y] = obj.Data(1, :); obj.Data(1, :) = []; end 错误:索引不能产生多个结果 我试图先

我试图在MATLAB中编写一个堆栈的简单实现,我在之前的工作中使用了一段代码,类似于:

A = zeros(5,3)
[x, y] = size(A)
正如预期的那样,这会根据需要将x分配给5,将y分配给3,但是我在堆栈实现中尝试了类似的操作,但遇到了一个错误:

  function [x, y] = pop(obj)
        [x, y] = obj.Data(1, :);
        obj.Data(1, :) = [];
   end
错误:索引不能产生多个结果

我试图先提取2x1矩阵,然后分配它,但这也不起作用:

    function [x, y] = pop(obj)
        top = obj.Data(1, :);
        [x, y] = top;
        obj.Data(1, :) = [];
    end
错误:输出参数太多

这对我来说似乎很奇怪,解释为什么会发生这种情况将是非常有趣的,同时也是一种解决方法


谢谢。

这是因为
大小
是一个可以返回多个输出的函数/操作,但是索引操作,例如
数据(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);

obj是什么?出来的
top
是什么?如您所述,如果top是2x1矩阵,则必须使用
x=top(1,1)
y=top(2,1)
提取值
obj
是2xn矩阵。