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

Unterschiedlicher Output der "find"-Funktion je na

 

demon tjd
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.03.17
Wohnort: ---
Version: MATLAB R2016b
     Beitrag Verfasst am: 23.03.2017, 19:19     Titel: Unterschiedlicher Output der "find"-Funktion je na
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problem mit der "find"-Funktion. Ich möchte eine Matrix nach Einträgen durchsuchen, die ein bestimmtes Kriterien erfüllen, und von diesen den Zeilen und Spalten Index haben. Mit der "find"-Funktion kein Problem, habe ich mir gedacht.
Das Problem ist aber folgendes, in der Regel sind die Outputs 2 nx1 Matrizen/Vektoren. Wenn das Argument der "find"-Funktion nur eine Zeile hat, werden 2 1xn Matrizen/Vektoren ausgegeben.

Beispiel:
Code:

a = rand(2,10);
b = rand(1,10);

[arow, acol] = find(a>0.5);
[brow, bcol] = find(b>0.5);
 


Das macht mir bei der Weiterverarbeitung der Daten einige Probleme. Klar kann ich das über eine if-Abfrage gerade biegen, aber das kann doch nicht die Lösung sein oder? Steckt da irgendein Sinn hinter den ich nicht verstehe? Kann ich MATLAB da irgendwie überlisten?

Vielen Dank für eure Anregungen!
Ich nutzte übrigens MATLAB R2016b
Private Nachricht senden Benutzer-Profile anzeigen


Wine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2017, 15:09     Titel:
  Antworten mit Zitat      
Hi,

was genau ist denn dein Problem bei der Rückgabe der Werte? Aktuell werden dir die Indizes der Zeilen und Spalten getrennt ausgegeben. Möchtest du das ändern? Bzw. in welcher Form hättest du deine Ausgabe gerne?

Wenn du nur die Zeilen und Spalten der gefunden Vektoren in einer Matrix zusammengefasst haben möchtest, kannst du das ganz einfach mit:
a = [arow, acol] bzw. gleich mit a = find(a>0.5) lösen.

Viele Grüße,
Ines
 
demon tjd
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.03.17
Wohnort: ---
Version: MATLAB R2016b
     Beitrag Verfasst am: 19.04.2017, 15:30     Titel:
  Antworten mit Zitat      
Nein, das ist nicht mein Problem, die Zeilen und Spalten sollen getrennt ausgegeben werden. Außerdem liefert:
Code:
a = rand(2,10);
[arow, acol] = find(a>0.5);
a = [arow, acol];

nicht das gleiche Ergibnis wie
Code:
a = rand(2,10);
a = find(a>0.5);

Im zweiten Fall beinhaltet a die "absoluten" Indizes und nicht die Zeilen und Spalten getrennt.

Das Problem ist, dass das Ergebnis je nach Format des Arguments der find-Funktion ein unterschiedliches Format hat.
Wenn das Argument mindestens 2 Zeilen hat (so wie a) ist das Ergebnis der find-Funktion ein Zeilen Vektor. Also z.B. [1;3;8;12;19]
Wenn das Argument nur eine Zeile hat (so wie b) ist das Ergebnis der find-Funktion ein Spalten Vektor. Also z.B [1 3 8 12 19]

Dieses unterschiedliche Format (je nach Format des Arguments) hat bei mir Probleme gemacht. Wie gesagt kein Weltuntergang, aber irgendwie auch extrem unlogisch in meinen Augen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2017, 16:27     Titel:
  Antworten mit Zitat      
Oh, das stimmt, sorry.

Ich denke die Logik dahinter ist, dass im vektorwertigen Fall der ausgegebene Vektor das selbe Format wie der Eingangsvektor haben soll - das steht diesbezüglich zumindest in der Dokumentation: "If X is a vector, then find returns a vector with the same orientation as X."
Am einfachsten kannst du das Problem also lösen, wenn du deinen Eingangsvektor b invertierst und ihn so zu einem Spaltenvektor machst, bevor du ihn in die find Funktion einspeist.
Also:

Code:

a = rand(2,10);
b = rand(1,10)';


Viele Grüße,
Ines
 
demon tjd
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.03.17
Wohnort: ---
Version: MATLAB R2016b
     Beitrag Verfasst am: 19.04.2017, 16:34     Titel:
  Antworten mit Zitat      
Ah, den Teil in der Doku habe ich wohl überlesen. Danke!

Wenn ich
Code:
[bcol, brow]  = find(b'>0.5);

verwende, sollte das für mich immer funktionieren. Das teste ich gleich mal.

Vielen Dank Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Wine

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2017, 16:52     Titel:
  Antworten mit Zitat      
Gerne Smile
Freut mich, dass ich helfen konnte Smile
Viel Erfolg dir noch!
Viele Grüße,
Ines
 
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.