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

Aus bestimmten Zeilen einer Matrix Mittelwert bilden

 

Hans Maulwurf
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 03.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2010, 17:50     Titel: Aus bestimmten Zeilen einer Matrix Mittelwert bilden
  Antworten mit Zitat      
Hallo,

mein Problem ist, dass ich eine Matrix der Form (x,4) habe, wobei x eine unregelmäßige Verteilung von reellen Zahlen zwischen 0<x<40 ist.
Ich möchte dennoch in bestimmten Bereichen, so alle 0,05x einen Mittelwert aller darin enthaltenen Elemente, für alle vier Spalten der Matrix, berechnen.

Wie kann ich hier am Besten vorgehen?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


joanna
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 26.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 08:35     Titel:
  Antworten mit Zitat      
Guten Morgen

Mit x meinst du doch die Zeilenanzahl der Matrix, oder?
Und was meinst du mit 0,05x?

Den Mittelwert über eine Zeile der Matrix kannst du ganz einfach berechnen lassen:
Code:

M = rand(40, 4);
mittel = mean(M(20, :));
 


Wenn das nicht das ist, was du suchst, geb noch ein genaueres Beispiel.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans Maulwurf
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 03.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 09:43     Titel:
  Antworten mit Zitat      
War vielleicht wirklich etwas schlecht ausgedrückt von mir. Also, ich habe eine Matrix A mit der Dimension (40000,4). Das sind also 3x40000 Wertepaare. Diese Anzahl möchte ich reduzieren, indem ich in bestimmte Intervallen den Mittelwert bilde. Die Sache ist jedoch die, dass die Werte nicht gleichmäßig verteilt sind und ich daher nicht einfach sagen kann, bilde mir z.B. alle 5 Zeilen einen Mittelwert. Der Sachverhalt stellt sich eher so dar: in der ersten Spalte habe ich die x-Werte zu stehen, die sich zwischen 0<x<40 bewegen und in den anderen 3 Spalten die dazugehörigen y-Werte von 3 Funktionen. Ich möchte gerne, dass jeweils in einem bestimmten Intervall von x der Mittelwert gebildet wird (sowohl von x, als auch den dazugehörigen 3 Funktionswerten).

Gruß

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 24.06.2010, 10:23     Titel:
  Antworten mit Zitat      
Hallo,

ich hoffe ich hab dich richtig verstanden, hier ein kleines beispiel, ersetze dein phi mit 0.05 oder jenachdem...

Code:

M =[6     3     8     5
     2     5     3     4
     2     7     8     8
     5     9     3     6
     9     9     9     5
     4     5     4     9
     6     2     2     3
     3     2     3     7
     7     3     6     7];
 
 phi=3;
 laufvar=size(M,1)/phi;
 for k=1:laufvar
     if(k~=laufvar)
         M_neu(k,:)=mean(M(M(:,1)>=(k-1)*phi & M(:,1)<k*phi,:));
     else
         M_neu(k,:)=mean(M(M(:,1)>=(k-1)*phi & M(:,1)<=k*phi,:));
     end
 end
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans Maulwurf
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 03.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 11:23     Titel:
  Antworten mit Zitat      
Hallo Fourier,

danke für deine Antwort. Prinzipiell scheint dein Code das zu machen, was ich benötige. Aber ich glaube bei dem Intervall phi habe ich mich falsch ausgedrückt.

Also, gemeint ist das so:
M= [x, y1, y2, y3]
Code:


M= [0.000 1.5 2.0 0.1
    0.010 1.3 1.4 1.6
    0.012 2.0 0.9 1.0
    0.300 2.0 5.0 7.0
    0.321 4.0 5.0 6.0
    0.456 1.4 2.5 2.1
    0.478 1.5 2.3 6.9
    0.501 3.1 2.4 5.6
    0.756 1.5 4.2 4.7
    0.781 6.8 3.9 3.2
    0.921 1.5 6.2 3.9
    0.978 1.3 4.8 7.1
    1.467 8.9 2.5 3.1]
 


Wenn phi z.B. jetzt 0.5 ist, dann soll der Mittelwert jeder Spalte gebildet werden für
0.0<x<0.5 [(0+0.01+0.012+0.3+0.321+0.456+0.478)/7 Bsp. für Spalte 1], dann aller Elemente bis
0.5<x<1.0 [(0.501+0.756+0.781+0.921+0.978)/5] und dann aller Elemente bis
1.0<x<1.5 [1.467/1].

Dies soll so geschehen, dass ich zu jedem gemittelten x auch die entsprechend gemittelten y1, y2 und y3 Funktionswerte habe.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 24.06.2010, 11:49     Titel:
  Antworten mit Zitat      
hmm versuch jetzt diesen code:
Code:

M= [0.000 1.5 2.0 0.1
    0.010 1.3 1.4 1.6
    0.012 2.0 0.9 1.0
    0.300 2.0 5.0 7.0
    0.321 4.0 5.0 6.0
    0.456 1.4 2.5 2.1
    0.478 1.5 2.3 6.9
    0.501 3.1 2.4 5.6
    0.756 1.5 4.2 4.7
    0.781 6.8 3.9 3.2
    0.921 1.5 6.2 3.9
    0.978 1.3 4.8 7.1
    1.467 8.9 2.5 3.1] ;
 
 phi=0.5;
 k=1;
 while(1)
     
     M_neu(k,:)=mean(M(M(:,1)>=(k-1)*phi & M(:,1)<k*phi,:),1);
     k=k+1;
     if(k*phi > max(M(:,1))),break, end
     
 end
 

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans Maulwurf
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 03.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 12:16     Titel:
  Antworten mit Zitat      
Danke für deine Mühe Fourier, aber leider funktioniert das Letze Script gar nicht bei mir. Bekomme da nur eine Nullmatrix ausgegeben, die nur in der letzten Zeile vier Einträge hat :-(

Hier mal mein gesamter Code:
Code:

clear all
clc

format long

name = '5mm';
phi = 1.0;

filename_alt = strcat( name,'.txt');
M = csvread(filename_alt);
 

x_un  = unique(M(:,1));
y_max = zeros(length(x_un),4);
for k = 1:length(x_un)
        y_max(x_un==x_un(k),:) = max(M(M(:,1)==x_un(k),:),[],1);
end


j=1;
while(1)
    M_neu(j,:) = mean(y_max(y_max(:,1) >= (j-1)*phi & y_max(:,1) < j*phi,:),1)
    j=j+1;
    if(j*phi > max(y_max(:,1))),break, end
end

% laufvar = size(y_max,1)/phi;
% for j = 1:laufvar
%    if(j~=laufvar)
%        y_mean(j,:) = mean(y_max(y_max(:,1) >= (j-1)*phi & y_max(:,1) < j*phi,:));
%    else
%        y_mean(j,:) = mean(y_max(y_max(:,1) >= (j-1)*phi & y_max(:,1) <= j*phi,:));
%    end
% end

filename =  strcat( name,'_','neu','.txt');
csvwrite(filename,M_neu)
 


Ich habe auch mal mal die Dateien angehangen

5mm.txt
 Beschreibung:

Download
 Dateiname:  5mm.txt
 Dateigröße:  2.04 MB
 Heruntergeladen:  600 mal
5mm_neu.txt
 Beschreibung:

Download
 Dateiname:  5mm_neu.txt
 Dateigröße:  299.8 KB
 Heruntergeladen:  512 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
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.