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 innerhalb einer Matrix kopieren

 

Flutsch
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 20.03.10
Wohnort: Rostock
Version: ---
     Beitrag Verfasst am: 09.06.2011, 20:03     Titel: Werte innerhalb einer Matrix kopieren
  Antworten mit Zitat      
moin,
ich habe ein Denkproblem mit dem ich gerade einfach nicht weiterkomme:

ich habe eine Matrix die z.B. wie folgt aussieht:

0 0 0 0 0 0 0 0 0
0 1 0 0 4 0 0 3 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 9 0 0 8 0 0 2 0
0 0 0 0 0 0 0 0 0

Die 0 sollen nun durch den jeweils dichtesten Wert ersetzt werden, welcher nicht 0 ist. Das Muster ist aber immer das gleiche, die Matrix besteht aus mehreren Teilmatrizen die, die Form:

0 0 0
0 X 0
0 0 0

besitzen.

Steh da gerade voill auf'm Schlauch, aber das kann doch eigtl. nicht so schwer sein?

Gruß,
Flutsch
Private Nachricht senden Benutzer-Profile anzeigen


Zenker
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 04.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 20:08     Titel:
  Antworten mit Zitat      
Mit ner Forschleife ists in der Tat recht leicht




Code:
x = deine matrix

for i = 2:size1-1
    for j = 2:size2-1
       
        result_mat(i,j) = max(max(x(i-1:i+1,j-1:j+1)));
       
    end
end


+ halt noch die Ränder richtig machen
(ungetesteter code)
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 04.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2011, 20:22     Titel:
  Antworten mit Zitat      
Und nochmal ne Alternative, wie ich finde eleganter:

Code:

x = deine matrix
[size_1,size_2] = size(x)

liste_pos = x(find(x ~=0));
liste_pos = liste_pos-1;
liste_2d = zeros(length(liste_pos),2);
liste_2d(:,1) = floor((liste_pos)/size_1) + 1 ;
liste_2d(:,2) = mod(liste_pos,size_2) + 1;

for i = 1:length(liste_pos)
   
    x(liste_2d(i,1)-1:liste_2d(i,1)+1,liste_2d(i,2)-1:liste_2d(i,2)+1) = max(max(x(liste_2d(i,1)-1:liste_2d(i,1)+1,liste_2d(i,2)-1:liste_2d(i,2)+1)));
   
   
   
end
 


Achtung, ebenfalls ungetestet, da du keinen Beispielcode mitgeliefert hast.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.06.2011, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich die Frage richtig verstehe, gehts einfacher:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 04.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2011, 00:51     Titel:
  Antworten mit Zitat      
Ja so gehts auch alternativ auch mit

Zitat:

conv2(deine_matrix,ones(3),'same')


bzw (schneller, vermutlich auch schneller als filter2, da nur 1d Faltung)
Code:

mask = ones(3,1);
new_mat = conv2(deine_matrix,mask,'same');
new_mat = conv2(new_mat,mask','same');
 


finde ich aber nicht unbedingt naheliegend bzw. intuitiv zugänglich, aber natürlich erheblich schneller weil conv2 extrem optimiert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Flutsch
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 20.03.10
Wohnort: Rostock
Version: ---
     Beitrag Verfasst am: 10.06.2011, 12:36     Titel:
  Antworten mit Zitat      
danke, das war genau das was ich gesucht habe.
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.