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

时间:2017-09-05 07:37:28

标签: 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

错误:索引无法产生多个结果。

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

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

错误:输出参数太多

这对我来说似乎很奇怪,并解释为什么会发生这种情况会非常有趣,以及解决这个问题

谢谢。

1 个答案:

答案 0 :(得分: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);