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

durch ein Wort bestimmte Zeilen aus Matrix löschen

 

Sven1904
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 11:26     Titel: durch ein Wort bestimmte Zeilen aus Matrix löschen
  Antworten mit Zitat      
Hallo Leute!

Ich bräuchte nochmal eure Hilfe Smile

Ich habe die Matrix A und eine zweite Matrix B. In der zweiten Matrix B kann variiert werden, an welcher Stelle z.B ein X steht. Dies wird dann an Matrix A übergeben und diese Zeile auch gelöscht. Also als Bespiel:

Code:
%Grundmatrix

A=[11 12 13 14 15 16 17 18 19
   21 22 23 24 25 26 27 28 29
   31 32 33 34 35 36 37 38 39
   41 42 43 44 45 46 47 48 49];

%Entscheidungsmatrix welche Zeile gelöscht werden soll

B= [0
    0
    x
    0]

%Zielmatrix

A=[11 12 13 14 15 16 17 18 19
   21 22 23 24 25 26 27 28 29
   41 42 43 44 45 46 47 48 49];


Hier steht in Zeile 3 ein X und somit wird auch von der Matrix A die 3. Zeile gelöscht. Geht das irgendwie? Oder wenn man es in eine Matrix verknüpft.

Das Ziel ist, dass ich definieren kann, welche Zeilen ich in der Matrix behalte.

Vielen vielen Dank für eure 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: 08.10.2013, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

wie soll B aussehen bzw. wie wird B konstruiert?

Grundsätzlich geht folgendes (logische Indizierung):
Code:
A=[11 12 13 14 15 16 17 18 19
   21 22 23 24 25 26 27 28 29
   31 32 33 34 35 36 37 38 39
   41 42 43 44 45 46 47 48 49];
B = logical([0; 0; 1; 0]);
A = A(~B, :);

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 12:15     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine schnelle Antwort!!!

Also es ist so. Ich habe eine Excelmatrix die ich einlese, in dem Fall 4x4. Jetzt möchte ich, dass die Zeilen gelöscht werden bei denen in eine Spalte zuvor Adj steht. Ich hätte jetzt gedacht, dass ich einmal die 4x4 als A-Matrix einlese und die Spalte mit Adj als B-Vektor einlese

Code:

XXX   |   0.00292753   0.00619815   0.00950154   0.012694
XXX   |   0.00364113   0.00770968   0.011819           0.015790
Adj    |   0.00245841   0.00520494   0.00797898   0.010660
XXX   |   0.00415204   0.00879067   0.013476           0.018004

 

Vielen Dank Smile
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: 08.10.2013, 13:06     Titel:
  Antworten mit Zitat      
Hallo,

dann dürfte die erste Spalte als Cell Array von Strings vorliegen, also:

Code:
A = A(~strcmp(B, 'Adj'), :);


Falls das nicht funktioniert, bitte eine solche Excel-Datei bzw. einen Ausschnitt davon posten, sowie den Code wie damit bisher gearbeitet wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 13:44     Titel:
  Antworten mit Zitat      
Ok ich sende mal die Datei plus den Code

Code:

%Einlesen der 4x4 Matrix
A = xlsread('Zeile_loeschen.xlsx','B1:D4')


%Einlesen der Spalte
[num,txt,raw]  = xlsread('Zeile_loeschen.xlsx','A1:A4')

B=txt

%Löschen der Zeile mit Adj
A = A(~strcmp(B, 'Adj'), :)
 



Normal ist die Excel Datei eine xlsx, aber die kann ich nicht hochladen
Danke schön!

Zeile_loeschen.xls
 Beschreibung:

Download
 Dateiname:  Zeile_loeschen.xls
 Dateigröße:  24 KB
 Heruntergeladen:  277 mal
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: 08.10.2013, 14:21     Titel:
  Antworten mit Zitat      
Hallo,

bei Code bitte immer dazuschreiben, worin das konkrete Problem besteht.

So geht's:
Code:
%Einlesen der Daten
[A,txt,raw]  = xlsread('Zeile_loeschen.xls','A1:D4');

B=raw(:,1);

%Löschen der Zeile mit Adj
A = A(~strcmp(B, 'adj'), :)


Wenn die erste Spalte immer einen Inhalt hat, sollte man bei größeren Dateien versuchen, raw nicht von xlsread zurückzuholen und B stattdessen aus txt extrahieren (sofern B nicht direkt txt ist).

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 14:30     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich bin dir wirklich dankbar, dass du mir hilfst! Das funktioniert jetzt.

1. Nur was ist wenn ich eine riesen Excel Datei habe und vllt B ganz woanders steht. Dann würde ich es ja einzeln laden. Erst die A-Matrix und dann den B-Vektor. Wie würde ich es dann schreiben?

2. Und wie ist es im Umkehrschluss möglich, dass alle Zeilen gelöscht werden, wo kein adj steht?


Code:
[A,txt,raw]  = xlsread('Zeile_loeschen.xlsx','B1:D4');

[B,txt,raw]  = xlsread('Zeile_loeschen.xlsx','A1:A4');

B= raw(:,1);

%Löschen der Zeile mit Adj
A = A(~strcmp(B, 'adj'), :)


Die erste Frage hätte ich jetzt so gelöst. Was heißt denn dann das raw?


Entschuldigung nochmal für die Fragen.


Schöne Grüße
Sven
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: 08.10.2013, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Was heißt denn dann das raw?

xlsread gibt grob gesagt folgende Argumente zurück:
1. numerische Daten
2. nichtnumerische Daten
3. Kombination aus beidem
Das steht aber auch so (bzw. ausführlicher und präziser) in der Doku.

Da bei den nichtnumerischen Daten leere Zeilen oben und unten abgeschnitten werden, kann es notwendig werden, über den 3. Output zu gehen.

Zitat:
Und wie ist es im Umkehrschluss möglich, dass alle Zeilen gelöscht werden, wo kein adj steht?

Dazu musst du nur die ~ (logische Verneinung) weglassen. Um aus den Antworten hier zu lernen, empfehle ich stark zu versuchen, das zumindest im Nachhinein im Detail zu verstehen, damit man es auch auf andere ähnliche Aufgabenstellungen anwenden kann.

Les doch mal was zur logischen Indizierung (logical indexing), z.B.
http://www.mathworks.com/help/matla.....og/logical-operators.html
http://www.mathworks.com/help/matla.....x-indexing.html#bq7egb6-1

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 18.09.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2013, 15:19     Titel:
  Antworten mit Zitat      
Vielen Dank! Das werde ich aufjeden Fall machen! Ich habe jetzt mit meiner Abschlussarbeit angefangen und dafür brauche ich das!

Vielen Dank für deine Gedult und tolle Hilfe!!!
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.