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

Position von Maximum bestimmen

 

Ewkos
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2016, 22:10     Titel: Position von Maximum bestimmen
  Antworten mit Zitat      
Hallo,

ich hab noch eine weitere Frage:
Ich habe ein n-dimensionales Array und möchte davon das Maximum sowie dessen Postioon bestimmen.
Das Maximum ist leicht zu bekommen, aber bei der Position nur die im umgewandelten 1-dim Array. Klar ich könnte das umrechnen, aber das muss auch einfacher gehen.
Bisher bin ich soweit:
Code:
[maxT, index] = max(data(:));
[index2,index3,index4] = ind2sub(size(data),index);

Letzteres setzt aber voraus, das ich weis welche DImension data hat, damit ich entsprechend viele Variablen einsetzen kann.

Vielen Dank schonmal
Ewkos
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.11.2016, 23:10     Titel:
  Antworten mit Zitat      
Hallo,

dass die Dimensionen variieren, ist jetzt nichts ungewöhnliches. Dass die Anzahl der Dimensionen variiert, finde ich allerdings sehr ungewöhnlich.

Selbst wenn es einfacher gehen sollte: das ist auch der Weg, den ich nehmen würde.

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

Forum-Meister


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

ich habe noch eine Lösung gefunden:

Code:
data = rand(2,3,4,5);
s = size(data);
[maxT, index] = max(data(:));
dims = cell(1, length(s));
[dims{:}] = ind2sub(s,index);
dims = cell2mat(dims)


Sollte man so etwas öfter brauchen, kann man es ja in eine Funktion packen.

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: 14.11.2016, 16:32     Titel:
  Antworten mit Zitat      
Hallo,

Eigentlich ist das Output-Format von ind2sub unpraktisch dafür. Die Daten in ein Cell und wieder in einen Vektor umzuwandeln ist schräg. Einfacher:
Code:
function sub=in2subv(siz, index)
n = length(siz);
cum = [1, cumprod(siz)];
sub = zeros(1, n);
for k = n:-1:1
  vk = rem(index - 1, cum(k)) + 1;
  sub(k) = (index - vk) / cum(k) + 1;
  index = vk;
end

Gruß, Jan

PS. Und wie immer bei Standard-Problemen: Da ist auch schonmal ein anderer drauf gekommen und hat es im FileExchange veröffentlich: https://www.mathworks.com/matlabcen.....-vector-from-linear-index
Also: Dort mal zu suchen ist immer eine gute Idee :-)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ewkos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2016, 16:42     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für die Hilfe; mit euren Codes klappt es nun:)

@Jan: danke für den Link; ich hatte zwar nach dem Problem gegoogelt, aber hatte nichts passendes gefunden. Da hatte ich wohl nicht die richtigen Begriffe eingegeben.

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