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

Index von Ergebnissen ansprechen ohne Hilfsvariable

 

jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2013, 11:42     Titel: Index von Ergebnissen ansprechen ohne Hilfsvariable
  Antworten mit Zitat      
Hallo,

folgende Frage zum Beispiel will ich die 3. Zahl eines Ergebnisses ansprechen wie folgt (beliebiges Beispiel):

Code:
x = find([0,0,0,1,2,0]==0);
x(3);
Ich möchte aber nicht immer für alles eine Variable anlegen und es lieber in der Form wie z.B.:
Code:
find([0,0,0,1,2,0]==0)(3);
ansprechen können, funktioniert aber nicht.
Die Fehlermeldung "Error: ()-indexing must appear last in an index expression." hilft mir nicht weiter.
Gibt es dazu eine Schreibweise in Matlab oder ist das unmöglich ohne Hilfsvariable?
Private Nachricht senden Benutzer-Profile anzeigen


jurtsche
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2013, 17:19     Titel:
  Antworten mit Zitat      
Hallo,

kennt jemand hierbei eine Möglichkeit, oder ist das in Matlab einfach nicht möglich?

LG
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: 24.05.2013, 17:29     Titel:
  Antworten mit Zitat      
mir ist kein weg bekannt. aber jan oder so haben da bestimmt mehr ahnung. du könntest dir aber selber eine funktion schreiben die das macht.
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2013, 17:37     Titel:
  Antworten mit Zitat      
Hallo Winkow,

Eine Funktion schreiben die das macht... auf die Idee bin ich noch nicht gekommen.
Wobei ich mir noch überlegen muss ob das in jedem Fall immer funktionieren würde.
Danke erstmal.

P.S.: Vielleicht gehts ja mit eval Very Happy ... dann besser nicht Wink

LG
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: 24.05.2013, 17:39     Titel:
  Antworten mit Zitat      
Zitat:
Wobei ich mir noch überlegen muss ob das in jedem Fall immer funktionieren würde.

du kannst in deiner funktion ja die eingangs variablen prüfen und falls es nicht geht eine fehlermeldung zurück geben oder nan oder so
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2013, 19:50     Titel:
  Antworten mit Zitat      
Nein, das dürfte ich nicht riskieren.
Es müsste schon 100% abdecken.
Berechnungen dauern teilweise mehrere Stunden, wenn dann noch eine Variation dabei ist, würde die Maschine über Nacht kein einziges Ergebnis ausspucken.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.05.2013, 00:31     Titel: Re: Index von Ergebnissen ansprechen ohne Hilfsvariable
  Antworten mit Zitat      
Hallo jurtsche,

Bisher ist ein direktes Indizieren des Outputs einer Funktion nicht möglich.
Es gibt aber für Cells diese Möglichkeit schon:
Code:
c = {1:2, 3:6};
c{2}(3)

Da auch das Extrahieren eines Cell-Elementes durch die geschweiften Klammern intern natürlich eine Funktion ist, sollen die eigentlich benötigten Mechanismen also bereits vollständig vorhanden sein, aber die Syntax erlaubt es nicht.

Eine Funktion dazu wäre:
Code:
function Out = Index(In, varargin)
Out = In(varargin{:});

Und Dein Beispiel-Problem:
Code:
Out = Index(find([0,0,0,1,2,0]==0), 3)

Hier kann man auch mehr-dimensionale Indizierungen vornehmen wie üblich. Sogar der ":" funktioniert:
Code:
Out = Index(magic(3), :, 2)

Dabei wird aus dem Doppelpunkt-Operator automatisch der String ':'. Man könnte auch direkt eingeben:
Code:
Out = Index(magic(3), ':', 2)

Nun muss jeder Programmierer für sich selbst entscheiden, ob dies nun übersichtlicher ist als:
Code:
M = magic(3);
Out = M(:, 2)


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Themenstarter

Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2013, 09:33     Titel:
  Antworten mit Zitat      
Hallo Jan,

das mit dem Cell-Elementen ist genau die Information die ich benötige.
Vielen Dank für die ausführliche Antwort. Very Happy

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn es um Performance geht, sollte man statt
Code:
tmp = find(bedingung);
ergebnis = tmp(3);


folgendes verwenden:
Code:
tmp = find(bedingung, 'first', 3);
ergebnis = tmp(3);

damit nicht der gesamte Vektor durchsucht wird.

Dann kann man natürlich Jans Trick anwenden. Ich kann mir jedoch nicht vorstellen, dass das große Auswirkungen auf die Performance haben wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.05.2013, 23:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

Aber ich veröffentliche doch keine Tricks im Forum! Das ist nur eine normale Funktion basierend auf dokumentierter Matlab-Methoden. ;-)

Für die Performance bringt meine Funktion keine Vorteile, ich erwarte eher einen Overhead für den Aufruf der Funktion. Aber auch ein direktes Indizieren des Outputs einer Funktion kann keine Vorteile bringen, weil weder Berechnungen gespart noch weniger temporärer Speicher benötigt wird.

Gruß, Jan
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 - 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.