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

Best. Werte einer Matrix ändern

 

Mr.Radar
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 15.09.2008, 15:38     Titel: Best. Werte einer Matrix ändern
  Antworten mit Zitat      
Hallo,

mich quält folgendes Problem:

Gegeben sind 2 Matrizen K (:,:,i) und I mit gleichen Dimensionen. K enthält Werte vom Typ Double, I besteht aus Nullen und Einsen. Steht an einer Stelle in I eine 1, soll an genau derselben Stelle in K ein Wert m subtrahiert werden.

Wie mach ich das effizient? (Also ohne die Matrix zeilen- und spaltenweise zu durchlaufen)

Ich hatte es schon probiert mit

Code:

[ix,iy] = find(I(:,:) == 1); % indices, wo Wert in I = 1 finden
K(ix,iy,i) = K(ix,iy,i) - m; % an diesen stellen m abziehen
 


doch das liefert mir falsche Ergebnisse (überprüft sowohl mit spy(I) (und festgestellt, dass I fehlerfrei ist) als auch spy(K(:,:,i)) (und festgestellt, dass in K falsche Werte drinstehen) )

any hints?
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 15.09.2008, 15:46     Titel:
  Antworten mit Zitat      
Hi,

wandel die Matrix I mit
Code:
um:
Code:
.
Klappt das?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 16.09.2008, 14:44     Titel:
  Antworten mit Zitat      
nschlange hat Folgendes geschrieben:

Klappt das?


"Index exceeds matrix dimensions."

Code:
K(logical(I),i)=K(logical(I),i)-m;
war der angepasste Code - leider funktionierts nicht. (K besteht aus i Matrizen, jede dieser Matrizen hat dieselbe Dimension wie I)

EDIT: Ok, das mit der i-ten Dimension dürfte nicht gepasst haben. Ich hab jetzt folgenden Workaround:

Code:
tmp=K(:,:,i);
    tmp(logical(MWI)) = tmp(logical(MWI))-m;
    K(:,:,i)=tmp;
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 16.09.2008, 15:20     Titel:
  Antworten mit Zitat      
Hi,

ups, die 3. Dimension hab ich überlesen.
Ich würde I entsprechend anpassen:
Code:
clear all;
clc;

A=rand(3,3,3)
I=fix(2*rand(3,3))
I=repmat(I,[1,1,size(A,3)])
m=100
A(logical(I))=A(logical(I))-m

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 16.09.2008, 15:38     Titel:
  Antworten mit Zitat      
ohne es probiert zu haben, aber: nachdem das ganze innerhalb einer schleife abläuft, habe ich ein konkretes i, und möchte eben nur die "teilmatrix" K(:,:,i) mit Hilfe von I verändern - aber dein vorschlag würde ja das ganze K ändern, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 16.09.2008, 15:55     Titel:
  Antworten mit Zitat      
Ja, das ganze K würde geändert.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 16.09.2008, 16:37     Titel:
  Antworten mit Zitat      
Willst du denn das gleiche I auf alle Untermatrizen von K anwenden (mit dem gelichen m) oder ändern sich innerhalb der Schleife irgendwelche Variablen?

Wenn nicht, dann sollte der Code von nschlange zu dem gleichien Ergebnis wie deine Schleife führen...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 16.09.2008, 19:36     Titel:
  Antworten mit Zitat      
nein, I und m ändern sich in jeder Schleifeniteration.

(Hintergrund: Ich baue mit der Schleife 12 Filterkerne K(:,:,i) f. i=1,..,12. m ist der Mittelwert von K(:,:,i), I ist sozusagen "Indikatormatrix", überall wo in ihr eine 1 steht, wurde ein Wert in den dazupassenden Filterkern geschrieben, und dort muss dann der Mittelwert m abgezogen werden.)
Private Nachricht senden Benutzer-Profile anzeigen
 
student
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 10.03.08
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 16.09.2008, 19:54     Titel:
  Antworten mit Zitat      
vieleicht versteh ich deine Frage nicht richtig, aber so wie ich das sehe, sollte das ganz einfach gehen.

Code:


mit dim(K)=dim(I)
und m = double
(überall wo I(.,.,.)==0 wird nichts abgezogen, dort wo I(.,.,.)=1 wird 1*m, also m subtrahiert...)

Gruss

Student
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Radar
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 28.08.08
Wohnort: ---
Version: 7.4.0
     Beitrag Verfasst am: 16.09.2008, 20:12     Titel:
  Antworten mit Zitat      
student hat Folgendes geschrieben:
vieleicht versteh ich deine Frage nicht richtig, aber so wie ich das sehe, sollte das ganz einfach gehen.

Code:


mit dim(K)=dim(I)
und m = double
(überall wo I(.,.,.)==0 wird nichts abgezogen, dort wo I(.,.,.)=1 wird 1*m, also m subtrahiert...)

Gruss

Student


Mh, wieso einfach, wenns auch kompliziert geht. Ich hab wohl den Wald vor lauter Bäumen nicht gesehn Rolling Eyes

Dank dir recht herzlich!
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.