【问题标题】:Matrix as input and output of Matlab function矩阵作为Matlab函数的输入输出
【发布时间】:2016-09-28 21:56:37
【问题描述】:

例如,我想要一个函数,让我删除矩阵中最大值为 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_ 在第 5 行第 1 列 pict2 = "

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

【问题讨论】:

  • 是的。那就是你想要的。但是请看我评论的第二部分,因为您尝试做的事情实际上是不可能的。
  • 好吧,我更改了函数 B = clear_(A) 的第一行并且没有错误。但是它仍然无法按我的意愿工作。
  • 您可以将整个函数替换为:B(max(B, [], 2) == 1, :) = [];

标签: matlab function matrix input


【解决方案1】:

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

function B = clear_(A)

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 2016-02-09
      • 2019-04-17
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多