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

Ungerdade Zeilen aus Matrix entfernen

 

beginer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2012, 16:31     Titel: Ungerdade Zeilen aus Matrix entfernen
  Antworten mit Zitat      
Hallo,
ich eine 20x4 Matrix "Trafo".
wie kann ich die ungeraden Zeilen der Matrix "Trafo" alle löschen?
Ich hab es so versucht:

Code:
for u=1:2:20
  Trafo(u,:)=[ ];
end


Leider funktioniert das leider nicht.
Jemand eine Ahnung?


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.02.2012, 16:46     Titel:
  Antworten mit Zitat      
Hallo,

überleg mal, warum nicht. Durch das Löschen verschieben sich ja die Indizes. Wenn du die erste Zeile löscht, hast du nur noch 19; wenn du die (ursprünglich) 3. Zeile löscht, nur noch 18 etc.

Hier geht das viel einfacher:
Code:
Trafo(1:2:end,:)=[ ];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
beginer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2012, 16:51     Titel:
  Antworten mit Zitat      
Merci! Very Happy
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 11:50     Titel:
  Antworten mit Zitat      
hallo,

habe ein ähnliches problem. ich habe eine textdatei und möchte hier die 2 kopfzeilen löschen und dann jede zweite zeil. wenn ich das wie oben erklärt eingebe wir alles gelöscht.

Code:
fid = fopen('Dateipfad','w+')
fid(1:2:end,:)=[];
neu = textscan(fid,'%s','Headerlines', 2);


wo ist der fehler?

vielen dank schonmal
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 13:17     Titel:
  Antworten mit Zitat      
fid ist nicht der Inhalt der Datei, sondern eine Zahl die die jeweilige Datei identifiziert.

neu ist der Inhalt, daraus könntest du jede 2. Zeile löschen:
Code:
neu(1:2:end,:)=[];
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 14:37     Titel:
  Antworten mit Zitat      
vielen dank für die info.
ich habe es jetzt so geschrieben. funktioniert aber immer noch nicht. danach ist die datei leer.

Code:
fid = fopen('Pfad\tv12.txt','w')
neu = textscan(fid,'%s','Headerlines', 2);
neu(find(2:2:end))=[];


muss ich hier die datei noch schließen oder beenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2012, 14:45     Titel:
  Antworten mit Zitat      
Hallo,

die Datei schließen solltest du auch. Ansonsten aber im wesentlichen das kopieren, was dmjr vorgeschlagen hat:

Code:
fid = fopen('Pfad\tv12.txt','w')
neu = textscan(fid,'%s','Headerlines', 2);
neu(2:2:end,:)=[];  
fclose(fid);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 15:33     Titel:
  Antworten mit Zitat      
ich habe jetzt den fehler gefunden. das programm baut eine 1x1zelle auf. in dieser ist ein 1x8 (bsp.) matrix. wie komme ich nun in die zelle rein um jede zweite zeile zu löschen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2012, 16:54     Titel:
  Antworten mit Zitat      
Hallo,

dann so:

Code:
fid = fopen('Pfad\tv12.txt','w')
neu = textscan(fid,'%s','Headerlines', 2);
neu = neu{1};
neu(2:2:end,:)=[];  
fclose(fid);  

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 17:08     Titel:
  Antworten mit Zitat      
hallo harald,

danke für die hilfe. wollte eben schreiben, dass ich es hinbekommen haben. ähnlich wie du es gesagt hast.

um es zu testen habe ich das 'w' weggelassen.
Code:
fid = fopen('Pfad\tv11.txt')
neu = textscan(fid,'%s','Headerlines', 2);
neu2 = neu{1,1};
neu2(1:2:end,:)=[];


matlab hat mir im arrayeditor genau gezeigt was ich wollte. wenn ich jetzt aber die datei direkt umschreiben will (siehe code unten) löscht mir matlab den gesamten text in der datei und gibt eine fehlermeldung aus(siehe ganz unten)

Code:
fid = fopen('Pfad\tv11.txt','w')
neu = textscan(fid,'%s','Headerlines', 2);
neu2 = neu{1,1};
neu2(1:2:end,:)=[];
fclose(fid)



Cache memory exhausted
??? Error using ==> textscan
Out of memory. Type HELP MEMORY for your options.

Error in ==> Minimieren at 9
neu = textscan(fid,'ü·¢xc ','Headerlines', 2)


danke für weitere hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2012, 17:54     Titel:
  Antworten mit Zitat      
Hallo,

wenn du in eine Textdatei schreiben willst, musst du das explizit mit fprintf machen.

Vorschlag:
- Datei zum Lesen öffnen und Inhalt extrahieren, Datei schließen
- Jede zweite Zeile in der Variable löschen
- Datei löschen
- Datei zum Schreiben öffnen, Variable reinschreiben, Datei schließen

Kann natürlich sein, dass es auch einfacher geht.

Grüße,
Harald
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: 05.11.2012, 22:29     Titel:
  Antworten mit Zitat      
Hallo mora,

Zitat:
Cache memory exhausted
??? Error using ==> textscan
Out of memory. Type HELP MEMORY for your options.

Error in ==> Minimieren at 9
neu = textscan(fid,'ü·¢xc ','Headerlines', 2)

Wow, das ist ein brutaler Fehler.
FOPEN('w') löscht das File (siehe "help fopen" und "doc fopen") und TEXTSCAN scheitert dann natürlich beim Lesen. Aber selbst der String des Filenamens in der Fehlermeldung wurde überschrieben. Erstaunlich. Welche Matlab-Version verwendest Du?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mora
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 02.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 15:54     Titel:
  Antworten mit Zitat      
hallo,

ich hatte die letzte woche noch viel zu tun und bin erst heute wieder dazugekommen, weiter an dem problem zu arbeiten.
ich arbeite hier mit der 2006er version. kann ich auch leider nicht ändern-->unirechner

wie dem auch sei abe ich nun endlich das problem gelöst. hier das ergebnis für die zukunft
Code:
fid = fopen('Pfad\tv11.txt')
A = textscan(fid,'%s','Headerlines', 2);
A2 = A{1,1};
A2(1:2:end,:)=[];
fclose(fid)

fid=fopen('A3.txt', 'wt+');
fprintf(fid, '%s\n', A2{:})
fclose(fid)


danke für eure hilfe
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: 13.11.2012, 12:24     Titel:
  Antworten mit Zitat      
Hallo mora,

Nur eine Randbemerkung:
Deine Uni hat zumindest noch R2007a. Aber es ist nicht sinnvoll Studenten an alten Matlab-Versionen lernen zu lassen. Deshalb wäre es vielleicht eine gute Idee eine Email an Volker Quarz oder Claudia Böhme zu schreiben und nach einer halbwegs aktuellen Matlab Version zu fragen.

Ich weiß aus eigener Erfahrung, dass es oft so aussieht, als könne man auf die Software-Verteilung an einer Uni keinen Einfluß nehmen. Aber die Studenten sind das eigentliche Kapital der Unis und es ist eine schlechte Idee genau dies an veralteten Systemen auszubilden.

Gruß, Jan
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.