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 in Matrix suchen und durch Wert Zeile-1 vorher ersetze

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 18.10.2018, 15:46     Titel: Werte in Matrix suchen und durch Wert Zeile-1 vorher ersetze
  Antworten mit Zitat      
Hallo Leute,

habe eine Matrix die wie im angehängten Bild aussieht.
Ich suche nach allen Werten die größer sind als 3.019 (in diesem Beispiel).

Die Werte sollen dann mit dem letzten gültigen Wert in der Spalte ersetzt werden.
Leider bekomme ich das nicht so hin... ich weiß nicht ob ich mir das gerade kaputt denke oder das wirklich nicht so einfach ist.


Im Moment ersetze ich alle einfach mit NaN und das mit folgendem Code:


Code:

    [i, j] = find(Torque_Temp1 > 3.019);
    for m = 1:length(i)
        for n = 2:length(i)
            Torque_Temp1(i(m),j(m)) = NaN;
        end
       
    end
 



Ich weiß ich könnte den gezeigten Code einfach mit


Code:

Torque_Temp1(find(Torque_Temp1 > 3.19)) = NaN;
 


ersetzen. Nur wollte ich das Problem mit einer for-Schleife lösen bekomme aber nicht das gewünschte Ergebnis.

Und die nächste Schwierigkeit ist es... das die selben Positionen die für die zu großen Werte gefunden worden sind in 5 andere Matrizen anzuwenden und die dort jeweiligen letzten Werte der Spalten für die zu großen Stellen zu ersetzen.
Ich hoffe das war jetzt verständlich... um es mal bildlich zu machen findet ihr noch ein Bild im Anhang das, dass händische ersetzen in Excel zeigt. (Matrix_Before und Matrix_After)





Ich danke euch im Voraus.

Matrix_after.png
 Beschreibung:

Download
 Dateiname:  Matrix_after.png
 Dateigröße:  49.47 KB
 Heruntergeladen:  220 mal
Matrix_Before.png
 Beschreibung:

Download
 Dateiname:  Matrix_Before.png
 Dateigröße:  50.19 KB
 Heruntergeladen:  237 mal
Matrix_BSP.png
 Beschreibung:

Download
 Dateiname:  Matrix_BSP.png
 Dateigröße:  28.07 KB
 Heruntergeladen:  231 mal
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: 23.10.2018, 15:22     Titel: Re: Werte in Matrix suchen und durch Wert Zeile-1 vorher ers
  Antworten mit Zitat      
Hallo JaSoIstEs,

Ich verstehe die Frage noch nicht ganz.
Zitat:
habe eine Matrix die wie im angehängten Bild aussieht.

Du hast 3 Bilder angehängt. Welches meinst Du? Kleiner Beispiele wären übersichtlicher.

Zitat:
Ich suche nach allen Werten die größer sind als 3.019 (in diesem Beispiel).

Code:
Index = X > 3.019;

Zitat:
Die Werte sollen dann mit dem letzten gültigen Wert in der Spalte ersetzt werden.

Welches ist "der letzte gültige Wert"?
Zitat:
Im Moment ersetze ich alle einfach mit NaN und das mit folgendem Code:

Wieso ersetzt Du sie mit NaNs?

Ich rate mal:
Code:
siz = size(X);
Result = X;
for k = 1:siz(2)
   q = find(X(:, k) > 3.019, 1);
   if ~isempty(q)
     if q ~= 1
       Result(q:siz(1), k) = X(q-1, k);
     else
        Result(:, k) = NaN;
     end
   end
end

Jetzt werden ab dem ersten Wert, der größer ist als das Limit alle Werte auf das Element gesetzt, das als letztes kleiner oder gleich groß war. Wenn schon der erste Wert größer ist, wird die ganze Spalte auf NaN gesetzt.
Meinst Du etwas in der Art?

Alternativ:
Code:
siz = size(X);
Result = NaN(siz);
for k = 1:siz(2)
   m = cumsum(cumprod((X(:, k) <= 3.019)));
   if m(1)
     Result(:, k) = X(m, k);
   end
end

Um diese Codes zu testen, wäre es praktisch, wenn Du einen kleinen sinnvollen Beispielsatz mit Inputs postest. Als Screenshot ist das unpraktisch.

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

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 09.11.2018, 14:32     Titel:
  Antworten mit Zitat      
Hat super Funktioniert. Danke dir vielmals.
Mein Code sieht jetzt wie folgend aus:

Code:

  siz = size(Torque_Temp1);
   
    for k = 1:siz(2)
        q = find(Torque_Temp1(:, k) > MaxValue, 1);
        if ~isempty(q)
            if q ~= 1
                Torque_Temp1(q:siz(1), k) = Torque_Temp1(q-1, k);
                ILrms_Temp1(q:siz(1), k) = ILrms_Temp1(q-1, k);
                Eff_Temp1(q:siz(1), k) = Eff_Temp1(q-1, k);
                Cu_loss_Temp1(q:siz(1), k) = Cu_loss_Temp1(q-1, k);
                Fe_loss_Temp1(q:siz(1), k) = Fe_loss_Temp1(q-1, k);
                Sat_Temp1(q:siz(1), k) = Sat_Temp1(q-1, k);
                I_DC_Temp1(q:siz(1), k) = I_DC_Temp1(q-1, k);
                I_Q1_Temp1(q:siz(1), k) = I_Q1_Temp1(q-1, k);
            else
                Torque_Temp1(:, k) = NaN;
                ILrms_Temp1(:,k) = NaN;
                Eff_Temp1(:,k) = NaN;
                Cu_loss_Temp1(:,k) = NaN;
                Fe_loss_Temp1(:,k) = NaN;
                Sat_Temp1(:,k) = NaN;
                I_DC_Temp1(:,k) = NaN;
                I_Q1_Temp1(:,k) = NaN;
            end
        end
    end
 
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.