2017-04-08 6 views
0

Ich habe eine N-mal-M-Matrix als Eingabe namens GR, die aus den folgenden Zahlen besteht: -3,0,2,4,7,10,12 Und ich habe einen Vektor zurückgeben. Wenn M = 1 ist, sollte es nur die Eingabe zurückgeben.Elemente aus einer Matrix löschen und Mittelwert berechnen

Wenn M> 1 Es sollte die niedrigste Zahl aus der Matrix entfernen und dann den Mittelwert der verbleibenden Zahlen berechnen. Wenn jedoch eine der Zahlen in der Zeile -3 ist, sollte der Wert -3 in der Ausgabe zurückgegeben werden.

Meine Gedanken des Problems:

Ist es möglich, eine for-Schleife zu machen?

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,:))

ich habe einfach keine Ahnung, wie zu erkennen, wenn eine der Zahlen in der Reihe ist -3 und dann diesen Wert zurück, anstatt den Mittelwert zu berechnen und wenn ich die niedrigsten zu löschen versucht, Nummer in der Matrix mit x = min (GR (i, :)) Matlab gab mir diese Fehlermassage "Löschung erfordert eine vorhandene Variable."

Antwort

0

können Sie Nan ‚s, nanmean, any und dim Argument in diesen Funktionen nutzen:

% 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

Können Sie vielleicht einen Teil des Codes erklären ich Hilfe Kommando des Matlab verwendet haben, aber ich bin mir nicht ganz sicher, was idxs3, minCol und minInd – Ryan

+0

tut i Kommentare hinzugefügt jede Zeile zu erklären. Sag mir, ob es immer noch nicht klar genug ist. – user2999345

0

ich in einer Pause Funktion setzen. Sobald es einen -3-Wert erkennt, bricht es aus der Schleife. Das Gleiche gilt für die andere Funktion.

Beachten Sie, dass es sich um eine i, j (M * N) Matrix handelt. Daher müssen Sie möglicherweise Ihre Schleife ändern.

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

Sie müssen zuerst Ihre Entscheidungshierarchie klar definieren. Machen Sie eine Liste von Prioritäten und dann wird es einfach sein, die Schleife zu schreiben. – Joseph

Verwandte Themen