Matlab 从矩阵中删除元素并计算平均值

Matlab 从矩阵中删除元素并计算平均值,matlab,loops,matrix,Matlab,Loops,Matrix,我有一个N×M矩阵作为输入,称为GR,它由以下数字组成:-3,0,2,4,7,10,12 我必须返回一个向量。如果M=1,那么它应该只返回输入 如果M>1,则应从矩阵中删除最小的数字,然后计算剩余数字的平均值。 但是,如果行中的一个数字是-3,那么它应该在输出中返回值-3 我对这个问题的看法是: 可以做一个for循环吗 i=1时的长度(GR(:,1)) 如果长度(GR(1,:)==1 GR=GR 结束 如果长度(GR(1,:)>1 x=min(GR(i,:)=[]%用于删除行中的最低数字 GR=

我有一个N×M矩阵作为输入,称为GR,它由以下数字组成:-3,0,2,4,7,10,12 我必须返回一个向量。如果M=1,那么它应该只返回输入

如果M>1,则应从矩阵中删除最小的数字,然后计算剩余数字的平均值。 但是,如果行中的一个数字是-3,那么它应该在输出中返回值-3

我对这个问题的看法是:

可以做一个for循环吗

i=1时的
长度(GR(:,1))
如果长度(GR(1,:)==1
GR=GR
结束
如果长度(GR(1,:)>1
x=min(GR(i,:)=[]%用于删除行中的最低数字
GR=总和(x)/长度(x(i,:)


我只是不知道如何检测行中的任何数字是否为-3,然后返回该值,而不是计算平均值。当我试图使用x=min(GR(I,:)删除矩阵中的最低数字时,matlab给了我这个错误信息“删除需要一个现有变量”。

您可以使用
Nan
”,
nanmean
any
和这些函数中的
dim
参数:

% generate random matrix
M = randi(3);
N = randi(3);
nums = [-3,0,2,4,7,10,12];
GR = reshape(randsample(nums,N*M,true),[N M]);
% computation:
% find if GR has only one column
if size(GR,2) == 1
    res = GR;
else
    % find indexes of rows with -3 in them
    idxs3 = any(GR == -3,2); 
    % the (column) index of the min. value in each row
    [~,minCol] = min(GR,[],2); 
    % convert [row,col] index pair into linear index
    minInd = sub2ind(size(GR),1:size(GR,1),minCol');
    % set minimum value in each row to nan - to ignore it on averaging
    GR(minInd) = nan;
    % averaging each rows (except for the Nans)
    res = nanmean(GR,2);
    % set each row with (-3) in it to (-3)
    res(idxs3) = -3;
end
disp(res) 

我加入了一个中断函数。一旦它检测到-3值,它就会从循环中断。另一个函数也是如此

注意,它是一个i,j(M*N)矩阵。因此,您可能需要更改循环

for i=1:length(GR(:,1))

if GR(i,1)==-3
GR=-3
break
end

If length(GR(1,:))==1

GR=GR
break
end

If length(GR(1,:))>1
x=min(GR(i,:))=[] % for removing the lowest number in the row
 GR=sum(x)/length(x(i,:))
end

end

您首先需要明确定义您的决策层次。列出优先顺序,这样写循环就容易了。你能解释一下我用matlab的帮助突击队编写的一些代码吗?但我不太清楚idxs3、minCol和minInd doesi在解释每一行时添加了什么注释。如果还不够清楚,告诉我。