WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mittelwertbildung für bestimmte Spaltenwerte in Matrix

 

stratist9011
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2015, 18:58     Titel: Mittelwertbildung für bestimmte Spaltenwerte in Matrix
  Antworten mit Zitat      
Hallo,

ich habe eine Matrix die zum Beispiel so aussieht:

0 0.45
0 0.367
0 1.2003
1 2222.3
1 334.09
1 22453

Ich will aus den Werten für Spalte 2 für die gilt Wert Spalte 1 =0 den Mittelwert der Werte aus Spalte 2 bilden.
Und für Werte der Spalte 2 für die gilt Wert Spalte 1 = 1 den Mittelwert der Spalte 2.

Ich bekomme es einfach nicht hin und finde leider auch kein passendes Beispiel hier im Forum. Es wäre super wenn mir jemand helfen könnte ....
Danke
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.03.2015, 19:15     Titel:
  Antworten mit Zitat      
Code:
und logisches indizieren sind hier die schlüsselwörter
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2015, 19:27     Titel:
  Antworten mit Zitat      
Hallo Winkow,

das ich mean benutzen muss macht sinn. Leider komme ich mit dem logischen indizieren nicht zurecht.

Ich habe bisher das hier ausprobiert ? (M ist meine Matrix)

Code:

for i=1:length(M)
     if M(i,1)==M(i+1,1)
     X(i) = mean(M(i,2))
     end
end
 


Leidert liefert mir das nicht das was ich möchte, sondern nur irgendwelche Mittelwerte. Ich möchte aber wie oben beschrieben immer nur die Mittelwerte aus den zur Spalte 1 zugehörigen Werten in Spalte 2 bilden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 05.03.2015, 19:59     Titel:
  Antworten mit Zitat      
das ist auch kein logisches indizieren. wie man logisch indiziert findet sich in den matlab fundamentals in der documentation.
die documentation von matlab ist sehr gut und ich kann nur empfehlen sie zu lesen.
http://de.mathworks.com/help/matlab.....hlight=logical%20indexing
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2015, 19:59     Titel:
  Antworten mit Zitat      
Okay danke schau ich mir mal an ...
Private Nachricht senden Benutzer-Profile anzeigen
 
stratist9011
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2015, 15:03     Titel:
  Antworten mit Zitat      
Hallo, also habe jetzt ein wenig mehr geschafft.

Für integer values klappt der folgende Code wunderbar.


Code:

M = [ 0 1 ; 0 1 ; 0 1 ; 0 1 ; 1 5 ; 1 2 ];
z = transpose(0:1:5);

m = zeros(length(M),1);

for k = 1:length(z)
    zz = z(k);
    for i = 1:length(M)
        if M(i,1)== zz
             m(i)= M(i,2);
        elseif M(i,1)~=zz
             m(i)= 0;
        end
        mm = mean(m,1);
    end
    Mean(k) = mm;
end
Mean=Mean';
MM = [ z , Mean];
 


Dabei ist M die Matrix für die entsprechend der Werte in Spalte 1 die Summe der korrespondierenden Werte von Spalte 2 gebildet wird.

Bei meiner eigentlichen Matrix handelt es sich aber um floating-point values und nicht um integers. Wenn ich darauf diesen Code anwende klappt es nicht. Das Programm läuft durch spuckt aber Mist aus. Jetzt habe ich auf den Seiten von Mathworks gefunden das man mit Toleranzen arbeiten muss damit nicht aufgrund von Rundungsfehlern, Matlab Werte falsch benutzt.
Hier der Code dazu :
Code:

deltaZ=[0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]';
ZZ  = zeros(length(HTC),1);
Sum = zeros(length(deltaZ),1);
for kk = 1:length(deltaZ)
    Z = deltaZ(kk);
    for i = 1:length(HTC)
        if HTC(i,1)== (Z < 0.0001)
             ZZ(i)= HTC(i,2);
        elseif HTC(i,1) ~= (Z < 0.0001)
             ZZ(i)= 0.0;
        end
        ZZZ = mean(ZZ,1,'double');
    end
    Mean(kk) = ZZZ;
end
Mean = [ deltaZ , Mean];
 



Ich denke das der Fehler bei den if statements liegt. Kann mir irgendwer weiterhelfen ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kipp

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2015, 15:30     Titel:
  Antworten mit Zitat      
Falls M sei die ursprüngliche Matrix ist:

Code:

% erster Mittelwert
m0 = mean(M(M(:,1)==0,2));
% zweiter Mittelwert
m1 = mean(M(M(:,1)==1,2));
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.