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 einer Matrix vergleichen

 

Phluffy
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2015, 23:45     Titel: Zeilen einer Matrix vergleichen
  Antworten mit Zitat      
Liebe Community,

Ich habe folgendes Problem:

Ich habe eine Matrix MxN (z.B. 24 Zeilen, 2 Spalten), welche aus Werten 0 und 1 besteht:

Es sind folgende Kombinatinoen möglich:

[0,0] sowie [1,0], [0,1] und [1,1]

Nun möchte ich mir anzeigen lassen, wie häufig z.B. die Kombination [0,0] in der Matrix als Zeile Auftritt.

Z.B. [0,0] gibt es 5x, [1,0] gibt es gar nicht, [0,1] gibt es 10x und [1,1] treten 4x auf.

Habt ihr eine Lösung wie ich das möglichst einfach als code schriben kann?
Ich habe schonüberlegt ggf. Strings der Zeilen zu bilden, oder verschachtelte if Anweisungen mit dem Vergleichsoperator "==", aber bisher kam ich zu keiner Lösung.

Danke für eure Hilfe, bitte entschuldigt falls ich den Thread falsch gepostet oder schlecht erklärt habe - ich bin für Anmerkungen offen Smile

Liebe Grüße,
Phluffy
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: 22.08.2015, 07:24     Titel:
  Antworten mit Zitat      
von binär in dec umwandeln oder unique und dann mit histc auszählen oder so.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Phluffy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2015, 10:48     Titel:
  Antworten mit Zitat      
Lieber Winkow, vielen Dank für deine Vorschläge und die zügige Antwort!

Die Zeilen in Dezimalzahlen umzuwandeln ist leider keine Option, da das Beispiel später auch einmal Kommazahlen enthalten soll, und [ 1,2 1,4 2,3] kann ich ja nicht als eine Dezimalzahl ausgeben Smile

Soweit bin ich bisher:

Code:
Matrix words (24x2):
[0   1
1   0
0   1
1   1
1   0
0   0
0   0
0   1
1   1
1   0
0   1
1   1
1   1
1   0
0   0
0   1
1   0
0   1
1   0
0   0
0   1
1   1
1   1
1   0]


die Funktion
Code:
wortarten=unique(word,'rows');
liefert folgendes:

Code:
wortarten= [ 0,0 ; 0.1 ; 1,0 ; 1,1 ]


Meine Frage ist nun wie folgt:
Wie erhalte ich einen (am besten Spalten-) Vektor, welche die Häufigkeiten jeder Wortart enthält:

z.B.
Code:
n_je_wort = [ 4 ; 7 ; 7 ; 6 ] ;
(das Wort [0,0] kam 4x vor)

Hinweis: der Befehl
Code:
sum(word(i,:)==[0,0])
gibt leider eine 1/0 für beide Zeilen zurück (z.B. [ 0 1 ]), würde es nur für den Gesamtausdruck eine 0(falsch) oder 1(richtig) zurückgeben, so könnte ich in einer Zählschleife

Code:

n_Wort1=0;
for i=1:24
n_wort1= nWort1 + sum(word(i,:)==wortart(1,:)); %Zaehlt die Anzahl des Wortart [0,0]
end


einen Zählindex selber ausrechnen. Aber so kommme ich einfach nicht weiter Sad

Danke für eure Hilfe!
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: 22.08.2015, 12:38     Titel:
  Antworten mit Zitat      
Hallo,

bitte ein aussagekräftiges Beispiel wählen (wenn das Beispiel nur 0 und 1 enthält, später aber alles sein kann, ist das nicht der Fall) und die Doku der empfohlenen Funktionen lesen.

Code:
[uwords, a, b] = unique(Matrix, 'rows')
n = hist(b, 1:numel(uwords))


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.08.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2015, 15:21     Titel:
  Antworten mit Zitat      
Vielen Dank dafür Harald, jetzt klappt es ausgezeichnet Very Happy

Ich habe vorher die Hilfe zu unique gelesen, wurde aber aus den zwei anderen outputs nicht schlau!

Ich werde mich natürlich beim nächsten mal um ein aussagekräftigeres Beispiel bemühen, habe selbst mit dem einfachen weg angefangen Smile

Bis bald!
Private Nachricht senden Benutzer-Profile anzeigen
 
2B

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2018, 19:12     Titel: Zwei Spalten Zeilenweise vergleichen
  Antworten mit Zitat      
Hallo,

habe auch ein Problem beim Vergleichen von zwei Spalten.
Habe vieles probiert, nur leider nicht weitergekommen. Sad

Ich habe zwei Spalten mit 1060 Zeilen (1060x2 double) und will Zeilenweise überprüfen, ob die Werte identisch sind:

13 13
13 15
14 14
14 14
....

Dazu mein code:

Code:

vergleich = {stage1, stage2};
ver = cell2mat(vergleich);

for k = 1:length(ver)
    if zus(:,1) == zus(:,end)
    disp('gleich')
    else      
    disp ('ungleich')
    end  
end
 


Es wird mir nur 'ungleich' ausgegeben, obwohl auch gleiche Werte vorhanden sind.
Wo liegt mein Fehler?
Und wie kann ich sagen, dass, wenn es 'gleich' ist, den Wert 0 bekommen soll und diesen Wert anschließend in der 3. Spalte im double speichern soll?
Sprich,

13 13 0
13 15 1
14 14 0
14 12 1
....

Vielen Dank im Voraus Smile
 
Harald
Forum-Meister

Forum-Meister


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

das Problem ist, dass du in der Schleife k überhaupt nicht verwendest. Es ist aber auch gar keine Schleife nötig:

Code:
zus(:,3) = ( zus(:,1) == zus(:,2) );


Grüße,
Harald

P.S.: die ersten beiden Codezeilen haben doch gar nichts mit der Frage zu tun? Dann bitte nächstes Mal weglassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
2B

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2018, 21:28     Titel:
  Antworten mit Zitat      
Hallo,

wow, vielen Dank. Hätte nie gedacht, dass es so einfach gehen könnte.
Dankeee Smile

Eine kleine Frage hätte ich noch. Ich hatte gelesen, dass in double array keinen Spaltennamen hinzugefügt werden kann, dies geht nur unter cell. Das habe ich auch hingekriegt.
Könnte ich aber denn zu diesem Beispiel wirklich keinen Spaltennamen hinzufügen?


Schöne Grüße
 
Harald
Forum-Meister

Forum-Meister


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

bei Doubles gibt es wirklich keine Spaltennamen. Ich würde statt Cell Arrays aber Tables verwenden.
Code:
T = array2table(zus, 'VariableNames', {'bla1', 'bla2', 'bla3'})


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2018, 23:15     Titel:
  Antworten mit Zitat      
Hallo,

ok, super. Dann mache ich es so. Vielen Dank, sie haben mir sehr geholfen Smile


Schöne Grüße
2B
 
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.