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

Werte aus Matrixmitte wählen

 

madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 05.12.2012, 16:36     Titel: Werte aus Matrixmitte wählen
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problemchen, stehe aber in Moment irgendwie auf dem Schlauch. Ich möchte mir immer die Werte oder den Wert aus der Matrixmitte rauspicken und in centerVal speichern. Wenn ich eine Matrix mit ungeradzahligen Zeilen und Spalten habe, dann ist die Mitte eindeutig und ich nehme z.B. für eine 5x5 Matrix den Wert an der Stelle (3,3) als centerVal.

Code:
centerVal = mymatrix(sizeX/2 , sizeY/2);
 


Bei geradzahligen Matritzen oder Matritzen mit nur Spalte oder nur Zeile geradzahlig, ist die Mitte ja nicht nur eine einziges Feld sondern zwei oder vier Felder. Hier will ich die Werte dann mitteln und centerVal zuweisen. Für eine 8x8 matrix möchte is z.B. die Inhalte der Felder (4,4) (4,5) (5,4) und (5,5) mitteln und dann centerVal zuweisen.

Ich bekomme es jetzt noch nicht wirklich hin sinnvolle Fallunterscheidungen zu schreiben. Meine fälle wären im Prinzip:
-Zeilen und Spalten gerade
-Zeilen und Spalten ungerade
-Zeilen gerade, Spalten ungerade
-Zeilen ungerade, Spalten gerade

Ich hoffe ich habe es einigermaßen verständlich beschrieben. Hat jmd einen eleganten Vorschlag? Die Entscheidung ob gerade oder ungerade Anzahl an Spalten und Zeilen könnte ich ja z.B. mit (mod(sizeX,2)==1) durchführen.

Grüße,

Mad
Private Nachricht senden Benutzer-Profile anzeigen


Flashmaster
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 02.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 16:42     Titel:
  Antworten mit Zitat      
nimm doch den gerundeten Wert... Wink
z.B.: round(5/2) = 3
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 05.12.2012, 17:02     Titel:
  Antworten mit Zitat      
hi Flashmaster,

danke für den Tip. Die idee hatte ich schon bzw habe ich schon für die ungeradzahligen verwendet. Meine Fragestellung sollte eher darauf abzielen wie ich es machen sollte, wenn ich die Fälle unterscheiden muss. Also (m,n)-matrix mit den möglichkeiten m oder n gerade und ungerade.

Wenn man z.B. eine 3x3 matrix hat ist klar, dass das das Feld (2,2) die Mitte ist. Bei einer 4x4 Matrix is die Mitte nicht nicht nur ein Feld. Hier liegen 4 Felder in der Mitte (2,3) (3,3) (3,2) und (3,3). Bei einer 3x4 Matrix gibt es zwei mittlere Felder (2,2) und (2,3).

Ich kann es leider nicht besser erkären aber ich hoffe es wurde ein bisschen klarer Razz
Private Nachricht senden Benutzer-Profile anzeigen
 
Flashmaster
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 02.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 17:08     Titel:
  Antworten mit Zitat      
Achso, du willst in dem Fall das z.B. 4 Felder im Zentrum liegen, den Mittelwert der 4 Felder in deiner Variablen speichern?

Also z.B.:
round(5/2) = 3
aber
floor(5/2) = 2

in dem beschriebenen Fall müsste man nurnoch 4 Fallunterscheidungen machen mit Hilfe von round and floor Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 05.12.2012, 17:29     Titel:
  Antworten mit Zitat      
genau das müsste ich tun. Ich habe jetzt schon eine Lösung aber ich finde sich nicht sonderlich schön.

Code:

if ((rem(sizeY,2)==0) && (rem(sizeX,2)==0))
    center     = mean(mean(myMatrix(sizeY/2 : sizeY/2+1 , sizeX/2 : sizeX/2+1)));  
end

if ((rem(sizeY,2)==1) && (rem(sizeX,2)==1))
    center     = myMatrix(round(sizeY/2), round(sizeX/2));  
end
 
if ((rem(sizeY,2)==0) && (rem(sizeX,2)==1))    
    center     = mean(myMatrix(sizeY/2 : sizeY/2+1, round(sizeX/2)));
end

if ((rem(sizeY,2)==1) && (rem(sizeX,2)==0))
    center     = mean(myMatrix(round(sizeY/2),sizeX/2 : sizeX/2+1));
end
 


ich hätte es eben gerne ein bisschen schöner gelöst aber das tuts auch mal Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 18:41     Titel:
  Antworten mit Zitat      
Code:
mean(X(floor(size(X,1)/2+.5):ceil(size(X,1)/2+.5),floor(size(X,2)/2+.5):ceil(size(X,2)/2+.5)))

X ist in diesem Fall die Matrix, wirklich schöner ist die Lösung auch nicht.
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.