MATLAB无法将变量分配给矩阵的元素
我试图在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 错误:索引不能产生多个结果 我试图先
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矩阵。