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

Null setzen, wenn mehr als ein Wert in Spalte

 

chris4aus
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2011, 05:19     Titel: Null setzen, wenn mehr als ein Wert in Spalte
  Antworten mit Zitat      
Hallo!

Ich habe eine grosse Matrix, die Laengenmessungen enthaelt. Dabei sind die Zeilen die unterschiedlichen Seiten eines Polygons, die Spalten Linien, die einem bestimmten Muster folgen.

Damit ich alle Werte erfasse, werden manche Linien doppelt erfasst.
Rechne ich nun die Summe aus, will ich aber nur einmal den WErt nehmen. Daher moechte ich gucken, ob in einer Spalte MEHR als ein Wert von Null unterschiedlich ist, den Maximalwert lassen und alle anderen Werte auf Null setzen.

Zuerst Reduktion der Matrix:
Code:
A = sum(any(SP_matrix,3))== 0;
    SP_matrix(:,A)=[];


Dafuer die Schleifenfunktion:
Code:
for spalt = 1: size(SP_matrix,2) % every column
       if sum(SP_matrix(:,spalt)) ~= SP_matrix(any(SP_matrix(:,spalt),3))
          [~,loc] = max(SP_matrix(:,spalt));
          SP_matrix(1:loc-1,spalt) = 0;
          SP_matrix(loc+1:end,spalt) = 0;
       end
    end % for every column


Geht das auch eleganter? Und ist das eine sichere Methode? Weil ich Matrixen habe (180 x 1310) selbst nach Reduktion und ich ploetzlich 60 m verliere, obwohl jeder Eintrag maximal 0.05 m ist. (Ich habe nach dem maximalen Eintrag mittels max(max(SP_matrix)) gesucht.

Bsp. fuer SP_matrix:
Code:
SP_matrix =

  Columns 1 through 13

         0    0.0437         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0    0.5000    0.5000         0         0
         0         0         0         0         0         0         0         0    0.5000         0         0         0         0
         0         0    0.5000    0.5000    0.5000         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0    0.2257
         0         0         0         0         0         0         0         0         0         0         0         0    0.0875
         0         0         0         0         0         0    0.1319         0         0         0         0    0.0875    0.1382
    0.0437         0         0         0         0         0    0.0875    0.0875         0         0         0    0.0902         0
         0         0         0         0         0    0.0875    0.0444         0         0         0         0         0         0

  Columns 14 through 26

         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0    0.5000
         0         0         0         0         0         0         0         0    0.5000    0.5000         0         0         0
         0         0         0         0         0         0         0    0.5000         0         0         0         0         0
         0         0    0.5000    0.5000         0         0         0         0         0         0         0         0         0
         0    0.5000         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0    0.0875         0
         0         0         0         0         0    0.3324         0         0         0         0    0.0875    0.3758         0
         0         0         0         0    0.2769    0.0875    0.0875         0         0         0         0         0         0
    0.2257         0         0         0    0.0875    0.2449    0.2449         0         0         0         0         0         0
    0.0875         0         0         0    0.1894         0         0         0         0         0         0         0         0
    0.1382         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0

  Columns 27 through 39

    0.5000    0.5000         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0    0.1894
         0         0         0         0         0         0         0         0    0.2449         0         0         0    0.0875
         0         0         0         0         0         0         0         0    0.0875         0         0         0    0.2769
         0         0         0    0.3758         0         0         0    0.0875         0         0         0         0         0
         0         0         0    0.0875         0         0         0         0         0         0         0         0         0
         0         0    0.0875         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0    0.5000    0.5000         0
         0         0         0         0         0         0         0         0         0    0.5000         0         0         0
         0         0         0         0         0    0.5000    0.5000         0         0         0         0         0         0
         0         0         0         0    0.5000         0         0         0         0         0         0         0         0

  Columns 40 through 50

         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0    0.0444         0         0         0    0.0875
         0         0         0         0    0.0902         0    0.0875         0         0         0         0
    0.1382         0         0         0    0.0875         0    0.1319         0         0         0         0
    0.0875         0         0         0    0.1777    0.3867         0         0         0         0         0
    0.2257         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0    0.5000    0.5000         0
         0         0         0         0         0         0         0    0.5000         0         0         0
         0         0    0.5000    0.5000         0         0         0         0         0         0         0
         0    0.5000         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0
         0         0         0         0         0         0         0         0         0         0         0

Ok, vielleicht nicht gerade sehr schoen abgebildet, aber ich hoffe, es gibt eine Idee.

Danke im Vorraus.

Gruss,
Christiane
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.12.2011, 12:12     Titel: Re: Null setzen, wenn mehr als ein Wert in Spalte
  Antworten mit Zitat      
Hallo chris4aus,

Du hast Dir mit der Frage eine menge Arbeit gemacht. Die meisten Information sind nicht hilfreich um das Problem zu lösen. Ich bin nicht sicher, ob ich es überhaupt richtig verstehe, aber ich versuche es mal:

Zitat:
Ich möchte in einer Matrix alle Elemente bis auf das maximale in jeder Spalte auf Null setzen.

Kann man Deine Frage auf diesen Satz reduzieren? Falls ja:
Code:
A = rand(5, 5);
sizeA = size(A);
B = zeros(sizeA);
[maxValue, maxIndex] = max(A, [], 1);
B(sub2ind(sizeA, maxIndex, sizeA(2))) = maxValue;

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2011, 23:14     Titel: Loesung
  Antworten mit Zitat      
Danke Jan!

Well, letztes Mal hat sich jemand beschwert, dass ich mein Problem nicht richtig erklaert habe.

Du hast eine winzige 1 vergessen:
Code:
sizeA = size(SP_matrix);
    SP_matrix_help = zeros(sizeA);
    [maxValue, maxIndex] = max(SP_matrix, [],1);
    SP_matrix_help(sub2ind(sizeA, maxIndex, 1:sizeA(2))) = maxValue;


Aber so funktioniert es!!!
DANKE.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.12.2011, 01:37     Titel: Re: Loesung
  Antworten mit Zitat      
Hallo chris4aus,

Ja, das ist das Standard-Vorgehen in einem Forum: Entweder man fordert mehr notwendige Details, oder weniger unnotwendige. Und wenn man genau alle Details gefunden hat, die gerade benötigt werden, um ein Problem zu lösen, ist damit die Lösung meistens schon klar vorgegeben.
Ein Forum lebt deshalb von Rückfragen.

Schön dass der Code hilft und Du das "1:" gefunden hast.

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.