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

Matrixelemente ersetzen unter einer bestimmten Bedingung

 

smaica
Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2012, 10:30     Titel: Matrixelemente ersetzen unter einer bestimmten Bedingung
  Antworten mit Zitat      
Hallo,

ich habe eine eigentlich ganz einfache Fragestellung die ich nicht hinbekomme.
Ich möchte in einer Matrix in der 4ten Spalte, wenn die Einträge da ==24 sind, die 24 durch eine 0 ersetzen.
Ich habe das mit einer if-Bedingung probiert, aber bekomme es nicht hin:

Code:

if Matrix(:,4)==24;
        Matrix(:,4)=0;
end
 


Vielen Danke schonmal!
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.10.2012, 12:06     Titel:
  Antworten mit Zitat      
Das wäre ein Möglichkeit

Code:

[row,] = find(M(:,4)==24); % Reihen (row) in der 4. Spalte finden, wo die 24 auftritt
M(row,4) = 0; % gefundene Elemente in row durch 0 ersetzen
 
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2012, 12:22     Titel:
  Antworten mit Zitat      
super, das hat geklappt, vielen Dank!

Ich habe jetzt noch Schwierigkeiten damit eine Zeile in einer Matrix zu ersetzen, ich versuche:

Code:

raw(2:zeilen,2)=Zeit
 


als Fehler kommt "Conversion to cell from double is not possible."

Zeit ist ein Zeitvector:
Code:
zeitangabe(j, :)= datevec(zeitvon{j}, 'HH:MM:SS'); % hier in for-Schleife
Zeit=datenum(zeitangabe);



Hier vllt noch einen Lösungsvorschlag?
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: 10.10.2012, 00:25     Titel:
  Antworten mit Zitat      
Hallo smaica,

Um die Frage zu verstehen, müssten wir noch wissen, welchen Typ "Zeit" und "raw" haben. Mit etwas Raten:
Code:
raw(2:zeilen,2) = {Zeit};

Nun stehen links und rechts vom "=" Cells.
Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2012, 11:12     Titel:
  Antworten mit Zitat      
Hallo Jan,

wenn ich das mit dem Code eingebe, dann steht in raw in jedem Feld der zweiten Spalte ein Vektor, der die Einträge von "Zeit" enthält und nicht in der Zweiten Spalte einfach anstatt der Einträge da die Einträge von Zeit.

Wenn ich raw öffne, steht da in jedem Feld <743x1 double> und wenn ich darauf klicke, dann sind das die Einträge des Vektors von "Zeit".

Ich weiß leider nicht welchen Typ "Zeit" und "raw" haben.

Raw ist eine Matrix, die ich erhalten habe mit:

Code:
[nums, txt, raw] = xlsread([Exceltabelle.xlsx]);


und Zeit ist im Prinzip:

Code:


Zeit=datenum(datevec(raw(2:zeilen,2){j}, 'HH:MM:SS'));

 


Also im Prinzip die Einträge die in der zweiten Spalte von raw zu beginn standen, ich habe sie aber im Laufe meines Skriptes bearbeitet (Werte addiert und Subtrahiert) und will die bearbeiteten Werte einfach wieder einsetzen.


LG
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: 11.10.2012, 16:28     Titel:
  Antworten mit Zitat      
Hallo smaica,

Den Typ einer Variablen erhält man entweder per "whos" Befehl oder mit
Code:


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

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2012, 09:23     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank. "Zeit" ist vom Typ double und "raw" ist cell.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2012, 11:36     Titel:
  Antworten mit Zitat      
p.s. ich wollte "Zeit", da das momentan als serielle Zeitnummer angegeben wird, also irgendwas mit 0.834 usw z.B., als datestr. umwandeln, aber

Code:
Zeit=datestr(datenum(zeitangabe), 'HH:MM');


gibt mir keinen einfachen Spaltenvektor mit 744 Einträgen zurück, sondern eine <744x5> große Matrix vom Typ char

wenn ich versuche den Zeitvektor gleich in einen Datestring umzuwandeln mit:

Code:
Zeit=datestr(zeitangabe, 'HH:MM');


bekomme ich sogar eine <4464x5> große Matrix vom Typ char?!

Was läuft da schief?

zeitangabe ist eine <744x6> große Matrix vom Typ double mit den Zeiten als Vektoren enthalten (Spalte 1-3 = 0 bei mir, da Datum nicht angegeben, Spalte 4 enthält die Stundenangabe, Spalte 5-6 = 0, da Minute und Sekunde =0)
(Die Matrix, die ich in meinen Forenposts zuvor "Zeit" genannt habe)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2012, 16:34     Titel:
  Antworten mit Zitat      
Hallo smaica,

datestr wandelt jede Zeitangabe in einen string mit 5 Zeichen um,
daher die <744x5> große Matrix.
Falls Du statt dessen eine Cell mit 744 Strings haben willst:
Code:
Zeit=cellstr(datestr(datenum(zeitangabe), 'HH:MM'));


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
smaica
Themenstarter

Forum-Century

Forum-Century


Beiträge: 105
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2012, 11:16     Titel:
  Antworten mit Zitat      
Super, das hat geklappt. Ich konnte sie jetzt auch in meine Ausgangsmatrix "raw" schreiben, vielen Dank!
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.