例如,我希望有一个函数可以删除我的矩阵中最高值为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 ="
我不确定哪些元素未定义?
答案 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