2017-04-08 87 views
0

我有一个N-M矩阵作为GR输入,它由以下数字组成:-3,0,2,4,7,10,12 而且我有返回一个向量。如果M = 1,那么它应该只是返回输入。从矩阵中删除元素并计算平均值

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

我对这个问题的看法:

是否可以做一个for循环?

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

我只是没有了如何检测,如果该行中的任何数字的是-3,然后返回一个值,而不是计算平均值的任何想法时,我试图删除最低数字在矩阵中使用x = min(GR(i,:))matlab给了我这个错误按摩'删除需要一个现有的变量'。

回答

0

你可以使用Nan的,nanmeananydim争论这些功能:

% 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) 
+0

你能解释一下也许一些我用MATLAB的帮助突击队的代码,但我不能肯定什么idxs3,minCol和minInd确实 – Ryan

+0

我添加注释解释每一行。告诉我它是否还不够清楚。 – user2999345

0

我把一个断点功能。只要它检测到-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 
+0

您首先需要清晰地定义您的决策层次结构。列出优先级列表,比编写循环更容易。 – Joseph