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

Zeilen mit Wert 0 löschen

 

schlauburger
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.07.08
Wohnort: berlin
Version: ---
     Beitrag Verfasst am: 08.09.2008, 16:16     Titel: Zeilen mit Wert 0 löschen
  Antworten mit Zitat      
Guten Tag.

Ich muss recht große (Tabellen-)Dateien bearbeiten.
So groß das Excel sie nicht mehr nimmt (ca. 3 millionen zeilen)
Ein Problem ist das ich alle Zeilen löschen möchte die in der 3. Spalte den Wert 0 haben (Die Spalten sind durch Leerzeichen getrennt). Die Zeile soll dann komplett verschwinden und der rest von unten nach oben "rutschen".
wie stell ich das am dümmsten an?
Private Nachricht senden Benutzer-Profile anzeigen


steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2008, 16:43     Titel:
  Antworten mit Zitat      
Geht es bei deiner Frage genaugenommen um das Einlesen der Daten oder ums löschen?

Für das Löschen:
http://www.gomatlab.de/bestimmte-ze.....mte+zeilen+l%F6schen.html

wobei du die Abfrage nicht nach der Teilbarkeit, wie im Link, machst sondern ob ein bestimmter Wert 0 ist z.B.:

Code:
A=[0 1 0; 1 1 1; 1 1 2]
b=A(:,1)==0
 

_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
schlauburger
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.07.08
Wohnort: berlin
Version: ---
     Beitrag Verfasst am: 08.09.2008, 16:47     Titel:
  Antworten mit Zitat      
es geht ums löschen.
ich werde mal versuchen mit dem link zu arbeiten.
leider sind meine programierkenntnisse nicht so gut aber ich hoffe ich schaffs

danke erstmal
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 08.09.2008, 21:46     Titel:
  Antworten mit Zitat      
Hi,

wenn Deine Daten in Matlab in der Matrix A vorliegen müsste sowas reichen:
Code:
A(A(:,3)==0,:)=[];

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
MEnde
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.01.14
Wohnort: Wiesbaden
Version: 2011b Mac
     Beitrag Verfasst am: 24.01.2014, 13:27     Titel:
  Antworten mit Zitat      
In diesem Zusammenhang habe ich mal eine Frage, und würde mich freuen wenn einer von euch Matlab Cracks zu meinem tieferen Verständnis beitragen könnte.
Ich habe mich auch damit beschäftigt, wie man Zeilen, die eine "0" als Wert besitzen, schnell löschen kann.
Auf folgende Ergebnisse bin ich gestoßen:
1. Variante mit der Summenfunktion
Code:

x (sum((x==0),2)>0,:)=[]
 

2. Variante mit der Any Funktion
Code:

x(any(x==0),2)>0,:)=[]
 

3. Variante mit der Any Funktion, vereinfacht!
Code:

x(any(x==0),2),:) = []
 


Alle drei Varianten führen zu dem Ergebnis, dass Zeilen mit einer "0" als Element gelöscht werden.
Jetzt meine Frage(n):
Was läuft bei der ersten Variante die Vorgehensweise von Matlab im Hintergrund ab? Ich verstehe nicht wo und wie eine Summe gebildet wird, die dann mit einem bestimmten Wert verglichen wird.
Hat Variante 3 einen wesentlichen Nachtteil im Vergleich zu Variante 1?
Sie kommt mir intuitiv als die bessere Alternative vor. Also gibt es da Vor- und Nachteile?
Wenn ich jetzt eine Matrix (35000 x 5) habe und die 0 Zeilen löschen möchte, lassen sich dann diese Varianten sicher anwenden?

Vielen Dank für euren Support. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.01.2014, 13:33     Titel:
  Antworten mit Zitat      
hallo
bitte keinen alten thread karpern ^^ das wird nicht gern gesehn
jetzt zu deinen fragen :
Zitat:
Was läuft bei der ersten Variante die Vorgehensweise von Matlab im Hintergrund ab?

erst wird x mit 0 verglichen. taucht eine 0 auf ist also in der boolschen matrix eine 1 vorhanden. dann wird die summe dieser boolschen matrix entlang der 2. dimension gebiltet. sollten sich also in einer zeile nullen befinden so ist die summe logischerweise irgendetwas größer als 0 der vergleich >0 liefert also ein true.
die beiden nachfolgenden varianten sind gleichwertig. der vergleich mit >0 ist überflüssig da bereits any die selbe matrix liefert
bsp:
Code:

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
MEnde
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.01.14
Wohnort: Wiesbaden
Version: 2011b Mac
     Beitrag Verfasst am: 24.01.2014, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank erstmal für die schnelle Antwort.
Dank der guten Erklärung, habe ich es jetzt nachvollziehen können.

Eine Frage ist allerdings noch offen.
Kann man mit allen drei Varianten auch große Matrizen, wie z.B. mit 35000 Zeilen und 5 Spalten manipulieren, ohne dass Probleme bzw. Fehler auftreten? Oder ist es ratsamer eine For-Schleife zu programmieren?

Gruss

Ps.
Sorry, war nicht meine Absicht den Thread zu kapern. Dachte die Themen seien verwandt. Kommt nicht wieder vor.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.01.2014, 14:54     Titel:
  Antworten mit Zitat      
Zitat:
Kann man mit allen drei Varianten auch große Matrizen, wie z.B. mit 35000 Zeilen und 5 Spalten manipulieren, ohne dass Probleme bzw. Fehler auftreten?

das ist nicht besonders groß.
warum sollte das nicht gehen? welche fehler sind bei dir aufgetreten?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
MEnde
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 21.01.14
Wohnort: Wiesbaden
Version: 2011b Mac
     Beitrag Verfasst am: 24.01.2014, 16:07     Titel:
  Antworten mit Zitat      
Noch sind keine Fehler aufgetreten.
Aber als blutiger Anfänger, wären mir vielleicht Fehler oder Ungereimtheiten nicht aufgefallen, die nicht offensichtlich sind.
Danke für die Info.
Ich werde mich jetzt mal der Sache weiter annähern und berichten.

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