矩阵作为Matlab函数的输入和输出

时间:2016-09-28 21:56:37

标签: matlab function matrix input

例如,我希望有一个函数可以删除我的矩阵中最高值为1的行。因此我写道:

% A is an input matrix
% pict2 suppose to be output cleared matrix

    function pict2 = clear_(A)
    B=A
    n = size(A,1)
    for i=1:n
      if(max(B(i,:))==1)
        B(i,:)=[]
      end
    end

但是在我打电话之后: pict2=clear_(pict) Matlab的目的是:

  

"警告:clear_:返回值列表中的某些元素未定义   警告:来自       clear_ at line 5 column 1 pict2 ="

我不确定哪些元素未定义?

2 个答案:

答案 0 :(得分:2)

输出参数的变量名必须与要返回的变量匹配。因此,您需要将第一行更改为以下内容,以便保存并返回对B的修改。

function B = clear_(A)

就您的算法而言,它不起作用,因为您在尝试循环时修改B。相反,您可以使用以下表达式替换整个函数,该表达式计算每一行的最大值,然后确定此值是否等于1并删除这种情况下的行。

B(max(B, [], 2) == 1, :) == [];

答案 1 :(得分:0)

我相信,除了您已经收到的建议外,您可能还想尝试以下方法。使用逻辑可能是解决此类问题的最佳选择之一,因为您不需要使用for循环:

function out = clear_matr(A)
    % ind is true for all the rows of A, where the highest value is not equal to 1
    ind = ~(max(A, [], 2) == 1);

    % filter A accordingly
    out = A(ind, :);
end