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

Elemete in Matrix (i,j,k) mit zugehörigem i,j,k finden

 

cnt_10
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 10:37     Titel: Elemete in Matrix (i,j,k) mit zugehörigem i,j,k finden
  Antworten mit Zitat      
Hallo zusammen,

ich benötige bitte eure Hilfe bei folgendem Problem.

Ich habe eine Matrix(i,j,k) 40x40x155 in der Werte von 1 bis 0 enthalten sind. Jetzt möchte ich gerne wissen, an welcher Stelle k ein Wert für i,j zum ersten Mal 0.05 wird.

Ich habe bereits im Forum recherchiert und es mit find und bsxfun probiert, aber leider ohne Erfolg.

Ich hoffe ihr könnt mir weiter helfen,

beste Grüße,

Hannes
Private Nachricht senden Benutzer-Profile anzeigen


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 11:00     Titel:
  Antworten mit Zitat      
Hi,
du willst also zu gegebenen i und j ein k finden?

Das geht dann so:

Code:

k=find(abs(Matrix(i,j,:)-0.05)<1E-6,1,'first');

 


Mit der Bedingung in find musst du schauen, wie es für dich am besten ist,
eventuell ist da ein >=0.05 besser, die von mir gepostete Variante sucht das erste k, welches näher als 10^-6 an 0.05 liegt.
(x ==0.05 ist bei numerischen Berechnungen oft problematisch)
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 22.08.2011, 11:06     Titel:
  Antworten mit Zitat      
Ich denke eher so:

Code:
idx = find(Matrix >= 0.05, 1, 'first');
[i, j, k] = ind2sub(size(Matrix), idx); % i, j, k Position
Private Nachricht senden Benutzer-Profile anzeigen
 
cnt_10
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 15:07     Titel: Elemete in Matrix (i,j,k) mit zugehörigem i,j,k finden
  Antworten mit Zitat      
Vielen Dank für eure schnelle Hilfe!

Erste Anmerkung: Ich hatte mich vorhin falsch ausgedrückt und suche eigentlich den ersten Wert kleiner 0.05 ..aber das Ändert ja nichts an dem Prinzip Smile

@Gast: Bei deinem Code kam leider die Fehlermeldung OUT OF MEMORY. Ich hatte es mit deiner Bedingung sowie einer <=0.05 Bedingung versucht.

@eupho: Ja, es klappt..ich bekomme die Position des ersten Wertes der Matrix kleiner 0.05. Wenn ich es jetzt noch in eine dopplete Schleife für alle i und alle j durchlaufen lasse, habe ich eine Matrix(i,j) mit den Indexwerten des ersten Auftretens <=0.05 in k.

Problem gelöst!

Dankeschön und noch einen schönen Tag euch! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 22.08.2011, 15:20     Titel:
  Antworten mit Zitat      
Dann habe ich etwas falsch verstanden oder du falsch umgesetzt.

Ich bin davon ausgegangen, dass du nur ein k haben willst, inwiefern benötigst du dann eine doppelte Schleife? Das ist in jedem Fall sehr ineffizient, weil jedes mal in der gesamten Matrix geschaut wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
cnt_10
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 22.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2011, 15:48     Titel: Elemete in Matrix (i,j,k) mit zugehörigem i,j,k finden
  Antworten mit Zitat      
Am Ende möchte ich aus der 3D-Matrix(i,j,k) mit 40x40x155 Elemeten eine 2D-Matrix(i,j) mit 40x40 Elemeten bekommen.

Ich durchsuche also für jede Kombination aus i und j alle k und lasse mir den ersten Wert <= 0.05 ausgeben.

Dieser Weg ist ziemlich rechenintensiv und ich würde mich über eine effizientere Lösung freuen.

Code:

for i=1:(size(Matrix,1)-1);
     for j=1:(size(Matrix,2)-1);
          index(i,j)=find(Matrix(i,j,:)<=0.05,1,'first');
     end;
end;


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