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

doppelte spalten einer matrix löschen

 

EkilDog
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.08.08
Wohnort: Darmstadt
Version: ---
     Beitrag Verfasst am: 18.08.2008, 19:29     Titel: doppelte spalten einer matrix löschen
  Antworten mit Zitat      
Ich hab eine schön große Matrix (werte darin nur entweder +1 oder -1) und möchte alle doppelten Spalten löschen. Die erste ihrer Art soll jeweils stehen bleiben und alle folgenden gelöscht werden.

Erschwerend kommt hinzu, dass ich noch nen Vektor mit den Spaltennummern (bezogen auf die Ausgangsmatrix) der gelöschen Spalten brauche.

Kann mir da jemand weiterhelfen, scheint keinen in irgendeiner Form hilfreichen MatLab Befehl zu geben.

Gruß,
Michael
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 19.08.2008, 10:48     Titel:
  Antworten mit Zitat      
Hallo Michael,

hier mein Vorschlag:

Code:
% kleine Beispielmatrix
A = [1 1 1 -1; 1 1 1 1;1 -1 1 1;-1 1 -1 -1]

% unique mit der Option 'rows' löscht doppelte Zeilen.
% Da es keine Option 'columns' gibt, muss man unique auf A' anwenden.
[A2, m2, n2] = unique(A','first','rows');

% Da unique gleichzeitig die Einträge sortiert,
% muss der Indexvektor m2 wieder zurück sortiert werden
A_bereinigt = A(:,sort(m2))

% gelöscht sind die Spalten, die nicht in m2 vorkommen.
% Mir ist hier als erstes setdiff eingefallen, aber vielleicht geht es noch schöner
geloescht = setdiff(1:size(A,2),m2)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
EkilDog
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 16.08.08
Wohnort: Darmstadt
Version: ---
     Beitrag Verfasst am: 19.08.2008, 17:27     Titel:
  Antworten mit Zitat      
Super Hinweis mit den Befehl unique. Genau sowas hatte ich gesucht aber in der Hilfe einfach nicht aufstöbern können.

Scheint prima zu funktionieren, werde bei Gelegenheit meine (extrem viele schleifen benötigende) Lösung von gestern Nacht dadurch ersetzen.

Danke Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Bastimfile

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2008, 00:01     Titel:
  Antworten mit Zitat      
hi,
weißt du auch wie man aus einer matrix, in der in einer spalte zwei mal der gleiche wert vorkommt, dann die gesamte zeile löscht. hier ein beispiel

12 23 34
23 45 0
76 67 45
33 67 99
in zeile 3 und 4 kommt in der 2ten spalte die 67 zweimal vor.
wie kann ich nun eine von den zwei zeilen identifizieren und löschen?
es ist egal welche von beiden gelöscht wird. die zeilen sind auch nicht komplett identisch.

wäre super wenn jemand eine lösung hätte
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 29.08.2008, 09:55     Titel:
  Antworten mit Zitat      
Hallo Bastimfile,

das geht genauso, nur etwas einfacher:

Code:
A=[12 23 34
23 45 0
76 67 45
33 67 99];
[A2_sort,ind]=unique(A(:,2))
B = A(ind,:)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
- dave -

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2008, 12:18     Titel:
  Antworten mit Zitat      
Hi,

habe gerade folgendes Problem.
Ich habe eine Matrix:

1. 2,11 0 0 1 0
2. 2,12 0 0 1 0
3. 2,15 0 0 1 0
4. 2,14 0 0 0 1
5. 2,13 0 0 0 1
6. 2,13 0 0 1 0
7. 2,16 0 0 1 0
...

jetzt möchte ich immer die beiden letzten Spalten betrachen (die mit den 1 und 0) und immer die Zeile, die gleich ist wie die Zeile davor, löschen.
Also müssten im Beispiel Zeile 2,3,5,7 gelöscht werden.

Vielen Dank für eure Hilfe

David
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2008, 12:44     Titel:
  Antworten mit Zitat      
Hallo,

mit diff kannst du die vergleichen.
Code:
A = [...] % deine Matrix
Ncol = [5 6];
idx = [ones(1,length(Ncol));diff(A(:,Ncol))]; % vergleiche Werte der Spalte 5 u. 6 zeilenweise
idx = sum(abs(idx),2); % beide Werte müssen 0 sein (geht auch mit | Verknüpfung)
A(idx==0,:) = []; % löschen von gleichen Zeilen

% oder

B = A(idx>0,:); % per Zuweisung der gültigen Zeilen
 


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 07.11.2008, 13:13     Titel:
  Antworten mit Zitat      
Hab gerade gesehen das dibor schon geantwortet hat, aber jetzt hab ichs schon fertig und deswegen hier ein weiterer Vorschlag mit etwas anderem Ansatz:

Code:

B=[1,0;1,0;1,0;0,1;0,1;1,0;1,0]; % dh bei dir A(:,4:5)

T=B(1:end-1,:)==B(2:end,:);
D=T(:,1)&T(:,2);
A([false;D],:)=[];

 


Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
-dave-
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2008, 13:53     Titel:
  Antworten mit Zitat      
Super! Funktioniert einwandfrei.

Vielen Dank für die Hilfe.

Gruß David
Private Nachricht senden Benutzer-Profile anzeigen
 
filthylilsecret
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2009, 20:53     Titel:
  Antworten mit Zitat      
Guten Abend, liebes Forum! Ich habe ein ähnliches Problem Smile
und zwar habe ich eine Matrix in der sich auch doppelte Einträge befinden. Nun das Problem ist, dass meine doppelten Einträge um einen gewissen Bereich streuen.

Beispiel
A= [2025 3147 4201 5339 6515 7587 8625 9767 5335 6515 7583]

Ich möchte jetzt beispielsweise eine der roten und der blauen Zahlen entfernen. Der Bereich der Schwankung kann +-5 betragen. (Die 6515 kann ich klar mit unique entfernen)

Ich müsste jetzt jedes Element i mit dem Rest vergleichen, ob es eine Zahl gibt, die innerhalb der Schwankung liegt und wenn ja, muss diese gelöscht werden. Wenn es geht bitte ohne Sortierung.

Gibt es eine einfache Lösung ohne viele if- und for-Schleifen? Smile

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 11:26     Titel:
  Antworten mit Zitat      
Guck im File Exchange mal nach 'consolidator'...
 
filthylilsecret
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 16:30     Titel:
  Antworten mit Zitat      
Scheint ganz gut zu funktionieren. Vielen Dank! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
muenchnerkindl
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2009, 12:14     Titel:
  Antworten mit Zitat      
leute ich hab als blutiger anfänger auch n Problem was matrizen angeht!
bzw 2 gleich!
wie kann ich den 2 stück matrizen 1x501 zu einer 2x501 matrize zusammenfassen?
und noch viel wichtiger! wie kann ichaus dieser matrize alles auser jeder 10ten wert löschen?
d.h. input:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
.
.
und ich möchte dann 0 10 20 30 40 rausbekommen!

vielen dank schon mal
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 03.04.2009, 12:25     Titel:
  Antworten mit Zitat      
Zusammenfassen zweier Matrizen A , B:
Code:
C=[A,B];
C=[A;B];

Transponieren:
Code:

_________________

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