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

Matrix durchlauf?

 

B1ND3R
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2008, 19:21     Titel: Matrix durchlauf?
  Antworten mit Zitat      
Nabend zusammen,

habe ein kleines problem, habe eine 511 x 676 große Matrix. Ich habe schon ein bisschen an der Matrix geändert, nur habe ich ein problem.

Code:

function [Daten] = filter_080407(Daten);

for i = 1 : 676
    for j = 1 : 511
        if Daten == (0.001)
            Daten(i,j) = 0;
        end;
        if Daten == (-0.001)
            Daten(i,j) = 0;
        end;
    end;
end;
 


und diese dann öffne, hängt sich mein rechner total auf. Habe ich das ganze zu kompliziert gemacht? Oder gibt es gar einen einfachen schritt?

vielen dank
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 07.04.2008, 19:42     Titel:
  Antworten mit Zitat      
Code:
       if Daten == (0.001)
            Daten(i,j) = 0;

Fehlen nicht die Indizes (i,j) in der ersten Zeile?

ansonsten lässt sich das ganze mit 2 Zeilen ersetzen
Code:
Daten(Daten==0.001)=0;
Daten(Daten==-0.001)=0;


Des weiteren wäre ich sehr vorsichtig, wenn man Doubles gegenseitig vergleicht - wegen den Round-Off-Fehler. Schau diesbezüglich nach der Funktion EPS in der MATLAB Doku nach.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
B1ND3R
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2008, 20:39     Titel:
  Antworten mit Zitat      
ok - wegen den indizes schaue noch mal...

also den round off den du meinst, kann eigentlich nicht so wirklich sein, weil mein befehl davor war, runden auf die 3 stelle hinterm komma.

trotzdem schonmal danke
Private Nachricht senden Benutzer-Profile anzeigen
 
B1ND3R
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2008, 20:45     Titel:
  Antworten mit Zitat      
ja cool - das geht, danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 07.04.2008, 23:19     Titel:
  Antworten mit Zitat      
Schau dir mal den find Befehl an - damit kannst Du die ganze Matrix auf einmal durchsuchen, was dein Programm deutslich beschleunigen sollte ....
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
B1ND3R
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2008, 12:41     Titel:
  Antworten mit Zitat      
Michaela hat Folgendes geschrieben:
Schau dir mal den find Befehl an - damit kannst Du die ganze Matrix auf einmal durchsuchen, was dein Programm deutslich beschleunigen sollte ....


nur erfüllt, der find befehl nicht so wirklich das was ich benötige, aber vllt. bräuchte ich den später nochmal, danke für den hinweis
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 08.04.2008, 13:37     Titel:
  Antworten mit Zitat      
Zitat:
Schau dir mal den find Befehl an - damit kannst Du die ganze Matrix auf einmal durchsuchen, was dein Programm deutslich beschleunigen sollte ....

Das wird es auf keinem Falle! Denn FIND durchsucht weder die Matrix, noch beschleunigt (eher umgekehrt) den Code.

FIND bestimmt lediglich die Indizes von Werten die ungleich 0 sind. Das hat mit der Suche nichts zu tun.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 08.04.2008, 17:12     Titel:
  Antworten mit Zitat      
Hallo,

wieder mal etwas Grundsätzliches:

Code:
function [Daten] = filter_080407(Daten);


So sollte man das nicht machen. Die Ausgabegröße sollte nicht identisch mit der Eingangsgröße sein. In so einem einfachen Fall geht das natürlich schon, aber prinzipiell kann man damit extrem auf die Nase fallen, gerade in Schleifen. Denn in 'Daten' werden ja bei Deinem Ansatz laufend Werte geändert!

Also besser

Code:
function Daten_out= filter_080407(Daten)

Daten_out = Daten;

Daten_out(Daten==0.001)=0;
Daten_out(Daten==-0.001)=0;

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 08.04.2008, 20:17     Titel:
  Antworten mit Zitat      
outsider hat Folgendes geschrieben:
Zitat:
Schau dir mal den find Befehl an - damit kannst Du die ganze Matrix auf einmal durchsuchen, was dein Programm deutslich beschleunigen sollte ....

Das wird es auf keinem Falle! Denn FIND durchsucht weder die Matrix, noch beschleunigt (eher umgekehrt) den Code.

FIND bestimmt lediglich die Indizes von Werten die ungleich 0 sind. Das hat mit der Suche nichts zu tun.


MfG


Ist jetzt nicht ganz klar weshalb -- im Endeffekt hätte ich find genauso wie im codebeispiel von tompie verwendet (nur eben mit find (a==b), wusste gar nicht, dass man das weglassen kann).

Kannst Du mir deinen Kommentar bitte näher erläutern?
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 08.04.2008, 23:52     Titel:
  Antworten mit Zitat      
Dies ist ebenfalls ein weiterer Vektorizationstrick.

angenommen wir haben ein Vektor
>> a = [10 20 30 40 50]

Falls man den 3 und 5 Element benötigt, schreibt man logischerweise:
>> a([3 5])

Da MATLAB vektororientiert arbeitet kann man diese Elemente auch durch einen binären Vektor indizieren, was schneller funktioniert.
>> ind = logical([0 0 1 0 1])
>> a(ind)

und das funktioniert sowohl mit Vektoren, als auch mit 2D, 3D und ND-Array und und und...

FIND konvertiert die binäre Folge [0 0 1 0 1] zu [3 5] in dem die Stellen die ungleich 0 sind gegen Positionnummer ausgetauscht werden. In den meissten Situationen ist diese Vorgang völlig überflüssig und kostet nur Zeit.

Wenn man mit MATLAB arbeitet muss man immer mehrdimensional denken. Das ist die Grundlage der Vektorization mit MATLAB. Smile


MfG
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 - 2024 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.