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

Wie vergleicht man Matrizen unterschiedlicher Länge?

 

Einspritzvorgang

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 11:49     Titel: Wie vergleicht man Matrizen unterschiedlicher Länge?
  Antworten mit Zitat      
Ich stehe vor einem gewaltigen Problem und habe schon etliche Foren nach einer Lösung durchsucht.

Ich habe zwei Matrizen mit jeweils 3 Spalten. Die Anzahl der Reihen unterscheiden sich jedoch leicht (70 und 74 Reihen). Nun möchte ich die Reihen mit denen aus der anderen Matrix vergleichen. Sie müssen nicht gleich sein, können auch ähnlich sein. Gibt es da einen Ansatz?

ismember funktioniert so nicht, da die elemente nie genau gleich sind. kann man bei ismember vielleicht einen schwellwert einbauen?

hier mal meine Matrizen

Code:
mB1 =

   10.0000  427.4762  968.9869
   10.0000  102.2991  337.0033
    9.0000  433.9346  363.0698
   10.0000  226.8764  268.7791
   12.0000  410.3451  531.7527
   11.0000  270.1133   68.2401
    8.0000  188.2274  102.4243
    9.0000  250.1670  630.3742
    9.0000  289.3263  833.7752
    8.0000   32.8322  467.8996
    6.0000  184.0949  927.8066
   10.0000  167.1554  801.0665
    6.0000   70.6457  803.9617
    7.0000  187.0649  600.8996
    7.0000  411.9599  914.8573
   12.0000  100.6608  741.2848
    7.0000  262.2102  770.1153
    7.0000  107.4194  407.3231
    5.0000  145.1516  342.2777
    8.0000  207.9099  505.1574
   11.0000  123.2072  675.8103
    6.0000   35.5727  686.9287
   15.0000  133.6312  401.7920
    6.0000   66.5224  412.8655
   12.0000  161.1131  502.8072
    7.0000   56.2066  637.5961
    7.0000  199.3653  466.6608
    5.0000  218.6190  452.8426
    4.0000  106.6330  609.5905
   12.0000   81.8380  569.2056
    6.0000  473.2779  667.8386
    5.0000  218.9364  124.3950
    7.0000  105.9599  779.3439
    8.0000  210.5194  130.5524
    9.0000   53.9224  524.8930
    5.0000   73.6517  658.9759
   11.0000   26.2356  668.8749
    8.0000  134.3207   28.4294
    6.0000   19.9922  548.0229
    9.0000  231.3526  810.2561
   11.0000   74.2291  456.7574
    6.0000  392.8298  546.2898
    7.0000   68.1422  556.0996
    4.0000  140.5229  801.7737
    6.0000    9.4267  564.2696
    7.0000   90.2716   50.3280
    4.0000   27.0903  236.9938
    9.0000  237.9043  740.3904
    8.0000  317.8802  848.9086
    5.0000  295.2959  496.6025
    3.0000   84.2386  292.8571
    5.0000   10.4302  649.0322
    6.0000   13.6125  858.7830
    8.0000  110.8562  102.9950
    7.0000  394.2781  105.9204
    7.0000   91.2792  422.8783
    4.0000   33.7701  987.2504
    5.0000   65.4731  912.7583
    9.0000   95.5607   80.4492
    7.0000   50.4056  800.7158
    5.0000  187.6887  654.8640
    7.0000   29.0610  484.5180
   10.0000   41.7510  919.2462
    7.0000  109.4590  842.2688
    7.0000   21.4602  223.1551
    5.0000  350.7198  160.0053
    8.0000  165.3087  365.1935
    9.0000   50.5669  770.8235
   10.0000   54.4706  598.9854
    5.0000   27.5837  323.1575


mB2 =

   10.0000  436.1298  939.4800
   10.0000  187.6726  898.4243
    7.0000  408.8205  915.8435
    9.0000  302.4733  770.5152
   12.0000  187.7049   61.3127
   10.0000  161.9174  801.4695
    6.0000  444.0849  316.5527
    7.0000  190.2172  559.2566
    6.0000  108.0634  270.9730
    5.0000  213.2326   75.4309
   12.0000  415.7316  504.8123
    9.0000   72.2179  759.8410
    6.0000  248.7814  624.0894
    8.0000  106.5314  689.8125
    9.0000   81.4730  564.7555
    6.0000  225.3186   60.4929
    9.0000   58.4549  612.5564
    6.0000   83.6197  510.9573
   10.0000  226.0228  254.1002
   11.0000   32.1049  567.2452
    7.0000  110.2720  349.0485
   10.0000   60.2532  567.7775
    8.0000   82.5007  261.5752
    8.0000  104.6850  590.0081
    8.0000  125.3916  648.9729
    7.0000   60.7199  370.5793
    8.0000  141.7725  776.9893
    8.0000   40.8027  860.6428
    9.0000  350.0827  145.9732
    5.0000  306.8244  428.2689
    8.0000   41.3871  355.3593
    5.0000   25.5995  677.6045
    7.0000  193.0445  465.6853
    9.0000   65.8658  510.9172
    7.0000   57.1913  478.6240
    8.0000  390.6715  544.6144
    8.0000  315.2286  847.8880
    8.0000  164.8185  456.4721
    6.0000  230.0475  834.9254
   11.0000   52.4174  593.4113
    6.0000  473.1621  661.6225
   10.0000  138.1312  763.0701
    8.0000  237.2573  989.3398
    6.0000  258.6605  770.4566
    7.0000  114.1407  780.7945
   10.0000   63.5537  172.1847
    6.0000   17.8455  691.3873
    4.0000   25.3083  632.5705
    8.0000   77.1370  145.0098
    8.0000   65.8827  900.7444
    8.0000   44.8846  634.1563
    8.0000  243.4290  766.9297
   11.0000  139.1603  349.0192
   11.0000   47.8173  736.1147
    6.0000   71.2870  351.4614
    8.0000  210.9875  474.2046
    6.0000  159.9689  623.4049
    4.0000  169.1286  313.2152
   11.0000  113.0292  723.1275
   11.0000   12.7127  541.9428
    7.0000  417.7772  445.9167
    5.0000  223.9952  413.4619
   13.0000   57.3831  664.3180
    4.0000  242.6512  537.7448
    8.0000   32.9418  815.5679
    9.0000  238.0324  755.4765
    5.0000   50.3906  793.8978
    8.0000   15.9475  456.3964
   10.0000   34.6960  785.1498
   14.0000   40.0112  373.3527
    5.0000  127.7463   35.8106
    4.0000   20.3139  173.5782
    7.0000   61.3892  158.3085
    4.0000   16.1696  772.4642


Harald
Forum-Meister

Forum-Meister


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

so ein Schwellwert kann meines Wissens nicht direkt eingebaut werden, siehe auch Dokumentation von ISMEMBER.

Was willst du denn genau wissen? Welche Zeilen der ersten Matrix annähernd in der zweiten vorkommen?

Es wäre hilfreich, wenn du den ismember-Befehl angibst, den du versucht hast.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 12:38     Titel:
  Antworten mit Zitat      
Zitat:
Was willst du denn genau wissen? Welche Zeilen der ersten Matrix annähernd in der zweiten vorkommen?


Genau das.
Mein Ansatz war wie folgt: Habe beie Matritzen nach der ersten Spalte (Das sind Radii von Kreisen, die anderen beiden sind deren Koordinaten) sortiert. Dann habe ich der kleineren Matrix ein paar extra Zeilen, welche nur Nullen enthalten verpasst. Dies ist nötig, da ich beide Matrizen danach subtrahieren will. Dadurch (mit abs) habe ich den Versatz bekommen, welcher ja ein gutes Maß für die Ähnlichkeit ist.

Code:
m1 = [radii1 centers1]
m1 = sortrows(m1, 1);
m2 = [radii2 centers2]
m2 = sortrows(m2, 1);

%Differnz in Zeilenanzahl berechnen
diffZeilen = size(m1,1)-size(m2,1);

diffZ = [0 0 0];

%Zeilen hinzufügen

m1 = [m1; diffZ; diffZ; diffZ; diffZ]

Schwellenwert = 10;
mB = abs(m1 - m2);
M = mB < Schwellenwert;


Allerdings ist das keine elegante Lösung da, ich ja zum einen die letzten Zeilen der langen Matrix nicht betrachte und zum anderen 2 ähnliche Zeilen, die nicht auf der gleichen Stufe sind, gänzlich ignoriert werden....
Die idee mit ismember habe ich wieder verworfen, da ich keine Möglichkeit gefunden habe, einen Schwellwert einzubauen. Gibt es eine?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2012, 12:56     Titel: Re: Wie vergleicht man Matrizen unterschiedlicher Länge?
  Antworten mit Zitat      
Hallo Einspritzvorgang,

Was genau bedeutet "ähnlich"?
Eine einfache Suche per FOR-Schleife ist schnell implementiert. Versuche es einfach mal und poste wieder, wenn es Schwierigkeiten gibt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Einspritzvorgang

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 14:41     Titel:
  Antworten mit Zitat      
mit ähnlich meine ich beim Radius (1. Spalte) eine Abweichung von +-2 und bei den Koordinaten (Spalte 2&3) eine Abweichung von +-10.

Was meinst du mit Suche? gibt es einen Befehl, mit dem man zwei Zeilen miteinander vergleich kann?

Dank und Gruß
Der Einspritzvorgang
 
Harald
Forum-Meister

Forum-Meister


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

hier ein Vorschlag:

Code:
drinnen = zeros(size(M1,1),1);
for I = 1:size(M1, 1)
    differenz = abs(bsxfun(@minus, M1(I,:), M2));
    drinnen(I) = any(differenz(:,1) < 2 & differenz(:,2) < 10 & differenz(:,3) < 10);
end
nnz(drinnen)


Viele Zeilen aus der ersten Matrix werden so aber nicht in der zweiten gefunden, nämlich 9.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2012, 17:48     Titel:
  Antworten mit Zitat      
Lieber Harald, der Code hilft mir sehr weiter. Habe ihn eingebaut und er funktioniert optimal. VIEL VIEL DANK. DU BIST EINE SEHR GROßE HILFE.

Mit einer einfachen Multiplikation komme ich dann auf 2-Spaltigen Vektor der die gefunden Koordinaten enthält:

Code:
centers1_gefunden = [m1(:,2).*drinnen m1(:,3).*drinnen]


Allerdings würde ich auch gerne an die Koordinaten aus m2 kommen, die den gefunden entsprechen. Letztendlich will ich nämlich die Distanz messen und in einem Bild darstellen....

Hast du eine idee?
 
Harald
Forum-Meister

Forum-Meister


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

das heißt, du musst die Zeile "drinnen(I) =..." anpassen.

Willst du jede annähernd passende Zeile oder nur die beste passende Zeile in der anderen Matrix haben? Falls letzteres: wie willst du messen, welche Zeile besser ist? Dir scheint ja der Unterschied in den Koordinaten weniger wichtig zu sein als im Radius.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2012, 13:13     Titel:
  Antworten mit Zitat      
Ich möchte nur die best passende Zeile (optimal wär es, wenn die Veränderung der Koordinaten von m1 zu m2 auch positiv ist).
das könnte man vielleicht erreichen, wenn man das "abs" für die Koordinatendifferenz wegläst und in der "drinnen(I)" einbaut, dass die Koordinatendifferenzen postiv oder Null sein müssen....

letztendlich will ich die distanzen von erkannten Kreisen zwischen zwei kurz hintereinander aufgenommen bildern berrechnen:



 
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.11.2012, 23:00     Titel:
  Antworten mit Zitat      
Hallo,

das sollte mit kleinen Anpassungen im Code möglich sein.
Eine wichtige Frage: wie definierst du die Distanzen zwischen Kreisen? Der Abstand zwischen den Punkten, die am wenigsten weit voneinander entfernt sind? Abstand der Mittelpunkte? Wie kommt dann Radius ins Spiel?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2012, 12:17     Titel:
  Antworten mit Zitat      
Als Distanz möchte ich die Abstände der Mittelpunkte berechnen. Den Radius habe ich nur benutzt, um den zugehörigen Kreis auf dem zweiten Bild zu indentifizieren. Er ist für die Berechnung der Distanz nicht relevant.

Gruß und Dank
 
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.