2016-06-23 6 views
1

Ich habe die Ergebnisse eines Experiments, in dem Teilnehmer eine Bewertung von 0-9 (abhängige Variable) in 5 verschiedenen Bedingungen (unabhängige Variable) geben, in einer zufälligen Reihenfolge. ich numerische Arrays ähnlich wie dieseWie findet man den Durchschnitt einer Teilmenge von Zellen in Matlab?

ratings = [ 5 7 2 4 8 7 6 3 5 6] 
level = [ 1 5 3 3 2 4 5 4 1 2] 

Ich mag würde die durchschnittliche Bewertung für jede Ebene von meinem Experiment finden, also kann ich schließlich als Streudiagramm grafisch darzustellen. Könnte mir jemand in die Richtung zeigen, wie das geht?

Antwort

1

Wenn Sie die Durchschnittsbewertung für jede Ebene berechnen möchten, können Sie dazu accumarray verwenden. Was accumarray tun wird, ist Gruppenbewertungen durch ihren entsprechenden Wert in level. Dann wendet es die als vierte Eingabe angegebene Funktion für jede dieser Gruppen an. In Ihrem Fall verwenden wir @mean, um einfach den Mittelwert aller Bewertungen zu berechnen, die denselben level Wert haben.

accumarray(level(:), ratings(:), [], @mean); 

%  5 
%  7 
%  3 
%  5 
%  6.5 
1

Ich würde für die accumarray Lösung gehen. Aber nur für Abwechslung funktioniert das auch:

result = nonzeros(sparse(level,1,ratings))./nonzeros(sparse(level,1,1)); 
+0

Du bist in letzter Zeit ein 'spärlicher' Kick! Klug. – Suever

+0

@Suever Sie hatten bereits den 'accumarray' Ansatz gewählt, also .. :-) –

Verwandte Themen