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

Schleife vektorisieren:großes mehrdimensionales Array füll

 

oskimo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 13:45     Titel: Schleife vektorisieren:großes mehrdimensionales Array füll
  Antworten mit Zitat      
Hallo,
ich sitze seit ein paar Stunden an diesem Problem und weiß keinen effizienteren Weg das Array "img" zu füllen. Eigentlich habe ich nur vor, 3D Vektoren in ein Array zu schreiben. Zum Beispiel den Vektor (1,2,3) an die Stelle im Array A(1,2,3). An dieser Stelle soll dann erst einmal eine 1 stehen.

Code:

for w=1:max_loop
  pointX = points3d(w,1)+1;
  pointY = points3d(w,2)+1;
  pointZ = points3d(w,3)+1;
  img(pointX, pointY, pointZ) = 1;
end
 

Mir wäre es lieb diese for-Schleife zu ersetzen, da alleine schon das 3 fache Indizieren 20ms dauert.
Vielen Dank!


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 14:10     Titel:
  Antworten mit Zitat      
Hi,
die +1 bei pointX, pointY, pointZ verstehe ich nicht, aber so sollte es gehen:

Code:

img(points3d(:,1)+1,points3d(:,2)+1,points3d(:,3)+1)=1;
 
 
oskimo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 14:35     Titel:
  Antworten mit Zitat      
Die +1 ist nur da, damit nicht versucht wird auf einen Index 0 zuzugreifen. Einige Vektoren heißen nämlich (0,3,1). Im Endeffekt verschiebe ich damit mein gesamtes Bild.

Deine Lösung hab ich schon versucht, nur ist meine cpu nun schon seit 10 min ausgelastet, ohne dass ich ein Ergebnis erhalte.
Wie wird denn sichergestellt, dass immer die richtigen Wertepaare benutzt werden bei dem : Operator? Kann es sein, dass alle möglichen Kombinationen durchlaufen werden?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.08.2011, 14:37     Titel:
  Antworten mit Zitat      
Hallo Gast1,
Zitat:
Code:
img(points3d(:,1)+1,points3d(:,2)+1,points3d(:,3)+1)=1;
 

Das mach nicht genau das gleiche. Es werden so nämlich immer ganze Zeilen and Spalten gesetzt. Beispiel:
Code:
x = zeros(2,2);
x(1:2, 1:2) = 1;
% ==> x = [1,1; 1,1] und nicht [1,0; 0,1]


SUB2IND hilft hier, den linearen Index zu bekommen:
Code:
img(sub2ind(size(img),(points3d(:,1)+1, points3d(:,2)+1, points3d(:,3)+1)) = 1;

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.