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

Betrag berechnen

 

molinchen
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 28.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2010, 12:18     Titel: Betrag berechnen
  Antworten mit Zitat      
Hallo,

ich würde gerne den Betrag pro Zeile einer "riesigen" Matrix (ca. 800000x4) berechnen. Also ich hätte danach gern einen Vektor 800000x1, wo dann je der Betrag der 4 Elemente steht.

Bisher mach ich das mit for- Schleife
Code:
for i=1:800000
betrag(i)=norm(data(i,:));
end



Das funktioniert ja alles wunderbar, dauert aber ewig.
Weiß jemand eine schnellere Möglickeit?
danke schonmal für die überlegungen und viele grüße
Private Nachricht senden Benutzer-Profile anzeigen


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 26.01.2010, 16:56     Titel:
  Antworten mit Zitat      
Hi,

probier doch mal die sum-Funktion. Hier wird ein Vektor, der die Summe jeder Spalte enthält, erzeugt.

Für die Zeilensumme einfach sum(A.') probieren
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 14.04.2010, 11:18     Titel:
  Antworten mit Zitat      
Ein Zeit-Problem ist, dass Du das Zielfeld dynamisch erweiterst.
Code:

betrag = zeros(800000,1);
for ii = 1:800000
betrag = sum(data(i,:));
end

KOmbiniert mit der Antwort von aj-geissler ergibt das:
Code:

betrag = zeros(800000,1);
betrag = sum(data.');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2010, 06:51     Titel:
  Antworten mit Zitat      
Es ist aber die norm der Vektoren gesucht und nicht die Summe. Außerdem braust du das array nicht vorher initialisieren wenn du keine Schleife verwendest.

Ich hab mal die zwei Versionen die mir eingefallen sind verglichen. Die zweite Version ist etwa 5 mal so schnell wie die erste.

Code:

%% Version 1

tic;
vek_norm = zeros(length(a),1);
for k = 1:length(a)
    vek_norm(k) = norm(a(k,:));
end
toc;

%% Version 2

tic;
vek_norm2 = sqrt(sum(a.^2,2));
toc;


plot(vek_norm);hold on;zoom on;
plot(vek_norm2,'r+');
 
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.