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

Variablen miteinander vergleichen

 

remix92
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2018, 17:38     Titel: Variablen miteinander vergleichen
  Antworten mit Zitat      
Hallo zusammen,

Ich habe ein kleines Problem..

Ich habe 2 Variablen:
Var1: hat 2730 Spalten und 200 Zeilen
Var2: hat 70 Spalten und 200 zeilen

Alle Spalteneinträge aus der Var2 sind auch in der Var1 enthalten (sind identisch).
Die identischen Spalten würde ich gerne aus der Var1 löschen.
Dh Heißt es müssen 70 Spalten aus Var1 gelöscht werden..
Leider bekomme ich das nicht so recht hin...

Wäre für jede Hilfe sehr dankbar Smile

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.03.2018, 20:51     Titel:
  Antworten mit Zitat      
Hallo,

generell:
Code:
Var1(:, cols) = [];


Weißt du denn, wo die Spalten enthalten sind?
Falls nicht, kann Transponieren und ismember mit Option 'rows' helfen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2018, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

Vielen Dank für deine Antwort.
Die Spalten befinden sich immer in der Spaltenanzahl:
1. 191 - 195
2. 386 - 390
3: 581 - 585
.
.
.
14. 2726 - 2730

Dh, Sie haben 5 aufeinanderfolgende Spalten mit 195 Abstand an Spalten.

Bekomme es einfach nicht hin ...

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
cols = [];
for start = 191:195:2726
cols = [cols, start:start+4];
end

... und dann wie gesagt.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2018, 14:27     Titel:
  Antworten mit Zitat      
Vielen Dank Smile

Klappt wunderbar
Private Nachricht senden Benutzer-Profile anzeigen
 
remix92
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2018, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

es hat sich nun eine weitere Frage für mich ergeben, welches der vorherigen Frage ähnelt.

Ich habe 2 Table Variablen (Var1 und Var2):
Var1: hat in der 1st Spalte 50 Einträge nach dem in der Var2 gesucht werden soll (gesucht soll ebenso in der Spalte 1 von Var2).

Das "Problem" ist nun, dass Var2 mehr als 1 Millionen Zeilen hat und einige Einträge mehrfach vorkommen können.

Diese sollen dennoch alle in Var3 untereinander kopiert werden.

ich habs folgermaßen probiert...
Code:


 for k = 1:size(Var1,1)
     for i = 1:size(Var2,1)
     if (Var1(k,1)== Var2(i,1))
         Var3 = Var2(k,:)
         
     end
     end
 end
       
 

Leider funktioniert es nicht ...

Wäre für jede Hilfe dankbar Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.03.2018, 18:32     Titel:
  Antworten mit Zitat      
Hallo,

und was funktioniert daran nicht?
Die Funktion ismember dürfte helfen, das effizienter zu gestalten.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.03.2018, 18:41     Titel:
  Antworten mit Zitat      
Hi,

also ich bekomme die Fehlermeldung:
Undefined operator '==' for input arguments of type 'table'.

wenn ich nur "=" verwende klappt es auch nicht...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
also ich bekomme die Fehlermeldung:
Undefined operator '==' for input arguments of type 'table'.

Versuch mal isequal und/oder Indizierung mit { }. Und wie gesagt: ismember sollte effizienter sein.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2018, 17:08     Titel:
  Antworten mit Zitat      
Vielen dank für die hilfe Smile
klappt nun zu 90% ....

leider gelingt es mir nicht genau diese Zeilen zu kopieren, die in Var2 gefunden werden.
es wird alles mit kopiert...
Sobald ich eine if Bedingung mit einbaue, funktioniert leider gar nix mehr ...

Ohne If Bedingung:
Code:

 for k = 1:size(Var1,1)
     for i= 1:size(Var2,1)
      Found(i,k) = ismember(Var1(k,1), Var2(i,1));
       Var3(i,:) = Var2(i,:);
     end
   end
 

Mit If bedingung:

Code:


   for k = 1:size(Var1,1)
     for i= 1:size(Var2,1)
      if {Found(i,k) = ismember(Var1(k,1), Var2(i,1))};
       Var3(i,:) = Var2(i,:);
     end
      end
   end
 


Wie könnte diese bedingung mit eingebaut werden?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.03.2018, 22:26     Titel:
  Antworten mit Zitat      
Hallo,

die Idee von ismember ist, dass beide Argumente Vektoren sein können. Du brauchst hier gar keine for-Schleife. Schau dir z.B. mal das erste Beispiel aus der Doku an.
Auch das zweite Rückgabeargument sollte hilfreich sein.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2018, 14:48     Titel:
  Antworten mit Zitat      
Hallo,
okay dann hat sich dann nun geklärt und funktioniert wunderbar und der Code ist deutlich eifnacher Smile
Code:

 Found= ismember(Var2, Var1);
 


so wird mir nun alles durchsucht Smile
Und Found ist nun eine logical Variable (mit 0 und 1)
0 für nicht übereinstimmende
1 für übereinstimmmende

Es hackt aber leider immer noch, dass ich genau die Zeilen in eine neue "Var3" kopieren möchte, die gefunden worden sind bzw übereinstimmen.

Kleines Beispiel:
in Found sind in der 10, 25 , 50 Zeile jeweils eine 1 eingetragen.
Wie kann ich ich genau die ganzen Zeilen (10,25 und 50) aus Var2 in Var3 kopieren?

Gruß

PS: Ich hoffe du verstehst was ich meine Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
remix92
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2018, 15:17     Titel:
  Antworten mit Zitat      
Hi,
ich glaub ich habs raus Smile


Code:


Var4 = Var2(Found,:);

 
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.