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

3d Matrix mit 3d Maske indizieren // Verständnisproblem

 

Kasi
Forum-Newbie

Forum-Newbie



Beiträge: 2
Anmeldedatum: 06.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2016, 09:03     Titel: 3d Matrix mit 3d Maske indizieren // Verständnisproblem
  Antworten mit Zitat      
Hallo zusammen,

ich habe im Laufe des morgens über einem Problem gesessen, was augenscheinlich leicht lösbar ist, ich aber trotzdem daran scheitere:

Ich habe eine 3d Matrix (56x4x188), in der ich bestimmte Abschnitte extrahieren will.
Die Indizes dieser Abschnitte habe ich ebenfalls in einer anderen 3d-Matrix (56x4x5).

Nun kann man das meines Wissens nach am besten mit linear indexing bewerkstelligen, nur hier stellt sich mein Problem:

Wie formatiere ich meine 3d-Index-Matrix um, damit ich drei Vektoren für ind2sub erhalte?

Ich kann zwar versuchen, das ganze manuell mit repmat & reshape mehr oder weniger händisch zu basteln, aber erstens habe ich hier ständig Denkfehler, welche Dimension denn gerade wiederholt werden muss, und außerdem habe ich irgendwie das Gefühl, dass eine viel elegantere Möglichkeit existiert, die ich nur nicht sehe.

Irgendwelche Vorschläge?

Hier mal ein Minimalbeispiel, wie ich zur Zeit versuche, das Problem zu lösen

Code:
data = rand(56,4,188);
index = round((rand(56,4,5)*187)) + 1;

% und dann wird's schon unelegant & unübersichtlich
tmpZ = reshape(permute(index,[3,2,1]),1,numel(index));
tmpX = repmat(1:56,4*5,1);
tmpXarray = reshape(permute(tmpX,[2 1]),1,numel(index));
tmpY = repmat(1:4,56*5,1);
tmpYarray = reshape(tmpY,1,numel(iMinLine));

linIndex = sub2ind(size(data),tmpXarray,tmpYarray,tmpZ);

% ich erhalte vielleicht das, was ich wollte,
% die Chance ist aber groß, dass oben was vertauscht wurde
dataROI = data(linIndex);
dataROI = reshape(dataROI,56,4,5);


Danke für die Mithilfe!
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: 06.04.2016, 13:48     Titel: Re: 3d Matrix mit 3d Maske indizieren // Verständnisproblem
  Antworten mit Zitat      
Hallo Kasi,

Du postest bisher Code, von dem Du nicht weißt, ob er das macht, was Du erwartest. Das reicht noch nicht als Erklärung. Kannst Du ein kleines Beispiel posten, dass genau die gewünschten Ergebnisse produziert? Wie sind die "Abschnitte" denn in der 2. Matrix gespeichert?

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.