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 in einer Matrix Zuordnen

 

MarieB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2017, 18:02     Titel: Zeilen in einer Matrix Zuordnen
  Antworten mit Zitat      
Hallo liebe Community,

ich bin leider noch eine blute Matlab Anfängerin und habe ein Problem.. ich habe schon einen ähnlichen Beitrag zu meinem Problem gefunden nur leider schaffe ich es nicht wirklich mein problem darauf zu abstrahieren.. :/

Ich habe zwei Matritzen A und B, beide mit drei Spalten.
Spalte 1 - ID fortlaufend 1 bis .... n
Spalte 2 - x Koordinate
Spalte 3 - y Koordinate
...x,y sind quasi immer Punkte

Ich möchte jeweils die Zeilen(nummern) in Matrix B finden wo der Abstand zu einem Punkt kleiner oder gleich r ist.

Im Ergebnis hätte ich gern eine Matrix die in Worten formuliert so aussieht:

Die Zeile n der Matrix A gehört zu Zeile m der Matrix B

Gern kann auch in den Spalten der Matrix die ensprechenden Koordinaten auftauchen.
Falls es für eine bestimmte Zeile in der Matrix B keinen Treffer in Matrix A gibt soll in der entsprechenden Zeile der Matrix A für die es keinen Treffer gibt "kein Treffer" oder so stehen. Für den Fall, dass es mehrere Punkte der Matrix B gibt für den die Abstandsbedingung passt sollen alle diese Zeilennummern hinter der jeweiligen Zeile in Matrix A auftauchen.
quasi in Worten:
Die Zeile n der Matrix passt zu Zeile m1,m2,.. der Matrix B

Danke für die Hilfe Smile falls mein Problem nicht ganz klar ist könnt ihr gern immer fragen.

Liebe Grüße,
Marie


Harald
Forum-Meister

Forum-Meister


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

die Frage kommt mir in der Tat bekannt vor.
Wenn du einen ähnlichen Beitrag gefunden hast, dann verlinke ihn doch bitte - dann brauchen wir nicht zu suchen.

Bitte poste auch was du versucht hast, um das auf deinen Fall anzupassen.

Dann wäre noch interessant, welche MATLAB-Version du verwendest.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2017, 20:16     Titel:
  Antworten mit Zitat      
In diesem Beitrag:

http://www.gomatlab.de/viewtopic,p,172903.html#172903

ich nutze Octave und kein Matlab.. ich hoffe das stellt kein großes Problem dar.

Ich würde es kurz an folgeden Beispiel fest machen:

Matrix A:

[1 , 1.0, 1.0;
2 , 2.0, 2.0;
3, 3.0, 3.0;
4 4.0, 4.0;
5 5.0,5.0
6 6.0, 6.0 ]

Matrix B:

[1 , 2.1 , 2.2;
2, 1.1, 1.2 ;
3 3.05, 3.05;
4 3.1, 3.15;
5 6.1, 6.1 ]

Wenn ich jetzt die Bedingung festlegen würde: d [math]\leq[\math] 1.

Soll am Ende rauskommen:

E= [
1 , 1.0, 1.0 , 2 (*) ;
2, 2.0 , 2.0, 1 ;
3, 3.0, 3.0, 3,4 (**) ;
4, 4.0, 4.0, "kein Treffer" ;
5, 5.0, 5.0 "kein Treffer";
6, 6.0, 6.0, 5 ; ]
_____
Spalte 1: ID's der Matrix A
Spalte 2: x-Koordinate Matrix A (vgl. Spalte 2 Matrix A)
Spalte 3: y-Koordinate Matrix A (vgl. Spalte 3 Matrix A)
Spalte 4: Zeilennummern von B wo Abstandsbedingung erfüllt ist

* = Zeilennummer des Treffers
** = Zeilennummern der Treffer

Viele Grüße,

Marie Smile
 
MarieB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2017, 20:17     Titel:
  Antworten mit Zitat      
okay, das mit dem kleinergleich hat nicht ganz geklappt:

Bed: d kleiner gleich 1

Bedingung möchte ich in der Späteren Anwendung varrieren
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.02.2017, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich nutze Octave und kein Matlab.. ich hoffe das stellt kein großes Problem dar.

Ich nutze ausschließlich MATLAB und kann daher nicht beurteilen, welche Funktionalität Octave bietet

Was hast du denn nun bis jetzt versucht?
Wie man die Abstände zwischen Zeilen berechnet, geht ja aus dem anderen Beitrag hervor. Dann kannst du überprüfen, welche Abstände < r sind, und diese Information per logischer Indizierung extrahieren. Zumindest in MATLAB.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2017, 11:49     Titel:
  Antworten mit Zitat      
Octave bietet weitestgehend die selben Funktionen wie Matlab (zumindest wenn die Aufgaben nicht allzu tiefgreifend und spezifisch werden), auch die Syntax ist eigentlich zum Großteil gleich. Smile

Zunächst habe ich ebenfalls überlegt wie man zunächst alle Distanzen berechnen könnte, dabei bin ich ebenfalls zu dem Ansatz
Code:
dists =  (A(:,2)' - B(:,2)).^2 + (A(:,3)' - B(:,3)).^2;
gekommen.

ich habe dann an eine if Schleife gedachte mit der Bedingung: dists < r

Wie ich die Anweisung zur Extrahierung in Code umsetzen soll ist mir leider nicht klar.

Weiterhin habe ich an eine elseif-Anweisung gedacht.. für die Punkte die keinen Treffern finden.

Wie ich es mache das mehere Punktnummern in der vierten Spalte auftauchen (für den Fall mehrerer Treffer) habe ich leider noch garkeine richtige Idee.

Vielen Dank bereits jetzt das du dich meinen Problem annimmst Smile

Marie
 
Harald
Forum-Meister

Forum-Meister


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

if brauchst du nicht:
Code:
closeEnough = dist < r;

erzeugt die logische Matrix schon.

Diese kannst du zeilenweise durchgehen und für jede Zeile von A mit find schauen, welche Zeilen von B passen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2017, 12:34     Titel:
  Antworten mit Zitat      
Code:
closeEnough=dist < r
sieht erstmal gut, aus zumindest kann man daraus schon eine logische zuordnung erkennen wenn man genau hinsieht Smile

mit: "Diese kannst du zeilenweise durchgehen und für jede Zeile von A mit find schauen, welche Zeilen von B passen." - weiß ich leider nicht genau wie du das meinst?

Viele Grüße Marie
 
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.