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 verschiedener Werte einer Spalte

 

Beni
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2012, 15:36     Titel: Mittelwertbildung verschiedener Werte einer Spalte
  Antworten mit Zitat      
Hallo liebe Matlab-Experten,

habe das folgende Problem an dem ich schon länger hänge Sad

Ich habe zwei Spalten mit Werten: (vereinfacht)

x | y
1.2 | 10.8
2.4 | 2.3
3.3 | -3.4
4.7 | 23.45
5.8 | 0.01
6.0 | 3.7
7.1 | -23.33
8.3 | -2
9.34 | 12.01


Ich möchte gerne aus der 2ten Spalte die z.B. ersten 3 Werte rausnehmen und den Mittelwert bilden. Dann die nächsten 3 Werte usw.

Aus der ersten Spalte soll jeweils nur der erste und der letzte Wert der drei Werte angezeigt werden.

Das Ergebnis sollte dann wie folgt aussehen:

(hier werden nur der erste und letzte Wert der jeweiligen drei Werte der ersten Spalte angezeigt und die jeweiligen Mittelwerte einfach an die jeweiligen Stellen in die 2te Spalte eingefügt und angezeigt)

x_neu | y_neu

1.2 | 3.23
3.3 | 3.23
4.7 | 9.05
6.0 | 9.05
7.1 | -4.44
9.34 | -4.44

Hoffe ich konnte es verständlich erklären Confused

Vielen Dank für eure Hilfe!

Gruß

Beni
_________________

"Ich weiß das ich nichts weiß"
Private Nachricht senden Benutzer-Profile anzeigen


soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2012, 20:37     Titel:
  Antworten mit Zitat      
Hi,

RESHAPE kann dir hierbei nützlich sein, z.B:

Code:
x = [1.2 10.8; 2.4 2.3; 3.3 -3.4; 4.7 23.45; 5.8 0.01; 6.0 3.7; 7.1 -23.33; 8.3 -2; 9.34 12.01];

result = [x(setdiff( 1:size(x,1), 2:3:size(x,1)), 1) reshape(repmat(mean(reshape(x(:,2), 3, [])), [2 1]), [], 1)]
Private Nachricht senden Benutzer-Profile anzeigen
 
Beni
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 09:40     Titel:
  Antworten mit Zitat      
Hi soad,

vielen Dank für deine schnelle Antwort Smile

Habe versucht dieses einfache Beispiel auf mein Problem anzuwenden.

Ich habe bei meinem Problem für x zwei Spalten je 10000 Werte und möchte von immer 100 Werte den Durschnitt bilden.

Die erste Spalte soll dabei wieder nur den ersten und den letzten Wert der jeweiligen Werte ausgeben, also nur 1, 100, 200, 300,... bis 10000.

Habe es wie folgt versucht, aber hat nicht funktioniert Sad

Code:


result = [x(setdiff( 1:size(x,1), 2:1-99:size(x,1)), 1) reshape(repmat(mean(reshape(x(:,2), 100, [])), [100 1]), [], 1)]

% mit dem Term "1-99" wollte ich immer die Werte 2-99 und 101-199 und 201-299 usw. haben

 


Für Hilfe wäre ich dankbar.

Vielen Dank.

Grüße
Beni
_________________

"Ich weiß das ich nichts weiß"
Private Nachricht senden Benutzer-Profile anzeigen
 
Beni
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 11:53     Titel:
  Antworten mit Zitat      
Hallo,

habe es mit ISMEMBER probiert, nur ist dann dabei aber der erste Wert nicht dabei Sad

Und bekomme immer eine Fehlermeldung:

?? Error using ==> horzcat
CAT arguments dimensions are not consistent.

Code:


result = [x(ismember( 1:size(x,1), 0:100:size(x,1)), 1) reshape(repmat(mean(reshape(x(:,2), 100, [])), [100 1]), [], 1)]

 


Habt ihr irgendwelche Ideen?

Danke
_________________

"Ich weiß das ich nichts weiß"

Zuletzt bearbeitet von Beni am 03.04.2012, 12:06, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 11:58     Titel:
  Antworten mit Zitat      
Hi,

1-99 erfüllt nicht den von dir gewünschten Zweck, sondern wird als 1 minus 99 interpretiert, d.h. dein Code würde einen Vektor von 1 bis size(x,1) mit Schrittweite -98 erzeugen. Schau dir am besten die Effekte der unten angeführten Befehle im einzelnen an, damit du es besser nachvollziehen kannst:


Code:
step = 100; % Anzahl der Elemente pro Mittelwert
elem = length(x); % Anzahl der Elemente in einer Spalte von x
result = [x(reshape([1:step:elem; step:step:elem], [], 1))  reshape(repmat(mean(reshape(x(:,2), step, [])), [2 1]), [], 1)];
Private Nachricht senden Benutzer-Profile anzeigen
 
Beni
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 12:40     Titel:
  Antworten mit Zitat      
Hi soad,

danke dir!

Das ist schon fast das was ich mir vorgestellt hatte.

Es werden bei deinem Vorschlag von den Werten von 1-100 und dann von 101-200 usw. die Mittelwerte gebildet.

Gibt es eine Möglichkeit die Mittelwerte von den Werten 1-100 und dann von 100-200 und dann von 200-300 usw. zu ermitteln?

Danke für die Hilfe.
_________________

"Ich weiß das ich nichts weiß"
Private Nachricht senden Benutzer-Profile anzeigen
 
soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 12:55     Titel:
  Antworten mit Zitat      
Hi Beni,

Beni hat Folgendes geschrieben:

Gibt es eine Möglichkeit die Mittelwerte von den Werten 1-100 und dann von 100-200 und dann von 200-300 usw. zu ermitteln?

Sicher, du musst jedoch nun die 1.Spalte gesondert betrachten, da du hier den Mittelwert über 100 Elemente berechnest und bei den restlichen Spalten über 101, d.h die Varianten mit RESHAPE wäre erst ab der 2.Spalte möglich, wobei du noch jeden 100sten Wert verdoppel müsstest.

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen
 
Beni
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 05.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2012, 15:18     Titel:
  Antworten mit Zitat      
Ok,

werde es mal so ausprobieren.

Danke dir.

Grüße

Beni
_________________

"Ich weiß das ich nichts weiß"
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.