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

mean auf variable Anzahl von Vektorelementen anwenden

 

Pelle
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2011, 23:21     Titel: mean auf variable Anzahl von Vektorelementen anwenden
  Antworten mit Zitat      
Hallo liebe Matlabber,

mir stellt sich gerade folgendes Problem:

Mir liegt ein Vektor "Anfang" und ein Vektor "Ende" vor. Beide beinhalten Indizes für einen Vektor "V". Aus den Werten, die zwischen den Indizes liegen sollen jeweils Mittelwerte berechnet werden.
Bislang schaffe ich das nur mit einer for-schleife:

Code:

Strecke = zeros(length(Anfang));

for i = 1:length(Anfang)
Strecke(i) = mean(V(Anfang(i):Ende(i)));
end
 


Wie kann ich diese for-schleife vermeiden?

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.04.2011, 12:21     Titel:
  Antworten mit Zitat      
Warum willst du die Schleife vermeiden? Schleifen können durchaus schneller als Einzeiler sein und sind oft besser zu verstehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pelle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2011, 12:41     Titel:
  Antworten mit Zitat      
Die for-schleife kann einige 1000 Schritte beinhalten. Ich hab nur die info, dass in Matlab for-schleifen zu vermeiden sind....
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.04.2011, 12:47     Titel:
  Antworten mit Zitat      
Dauert die Berechnung so signifikant lange? Ich bezweifle, dass es mit einem Einzeiler schneller gehen würde, da die Hauptrechenzeit nicht an der Schleife, sondern an der Mittelung liegen wird. Und mehrere 1000 Durchläufe ist nicht viel..
Private Nachricht senden Benutzer-Profile anzeigen
 
Pelle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2011, 13:01     Titel:
  Antworten mit Zitat      
kann ich dir nicht sagen...schreibe gerade nur den code mit der Vorgabe:
so schnell wie möglich.
Auf die eigentlichen Daten habe ich keinen Zugriff.
Gehts also in einem eleganten einzeiler oder nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.04.2011, 13:06     Titel:
  Antworten mit Zitat      
Ich sage nein, und eleganter sowieso nicht..

Code:
Strecke = zeros(length(Anfang), 1);


muss noch geändert werden, sonst wird ein quadratisches Array präallokiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pelle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2011, 13:09     Titel:
  Antworten mit Zitat      
ok, danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.04.2011, 14:37     Titel:
  Antworten mit Zitat      
Hallo eupho,

könntest du mir freundlicherweise mal ein Beispiel zeigen wie das Problem mit einem Einzeiler bzw. ohne Schleife aussehen würde. Ich habe nähmlich gestern keine Lösung ohne Schleife gefunden. Ansonsten stimme ich dir allerdings zu, bei solch "einfachen" Schleifen sind Schleifen in Malab auch sehr schnell.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.04.2011, 14:45     Titel:
  Antworten mit Zitat      
Hallo Sco,

Zitat:
Gehts also in einem eleganten einzeiler oder nicht?


Zitat:
Ich sage nein, und eleganter sowieso nicht..


Wie gesagt, ich wüsste auch nicht wie Wink

Viele Grüße,
Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.04.2011, 01:03     Titel: Re: mean auf variable Anzahl von Vektorelementen anwenden
  Antworten mit Zitat      
Hallo Pelle,

Können die Bereiche in Anfang:Ende sich überlappen?

Dies wäre wohl etwas schneller:
Code:
Strecke = zeros(1, length(Anfang));
len = Ende - Anfang + 1;
for i = 1:length(Anfang)
  Strecke(i) = sum(V(Anfang(i):Ende(i))) / len(i);
end

Der Aufruf der M-Funktion MEAN hat einen Overhead, den man per compilierten Funktionen SUM / LEN vermeiden kann.

Mit ACCUMARRAY sollte es zwar auch funktionieren, dazu müsste man aber einen großen temporären Vektor erstellen, was im Allgemeinen eine Menge Zeit raubt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Pelle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2011, 18:44     Titel:
  Antworten mit Zitat      
Hallo Jan,

das läuft, danke für den Tip!!!

Grüße,

Pelle
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.