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

Text in logical

 

sdeluxe
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 11:03     Titel: Text in logical
  Antworten mit Zitat      
Hallo Matlabfreunde,

ich habe folgedes Problem und hoffe, ihr könnt mir helfen.

ich habe eine Matrix vom Typ 365x10 logical vorliegen. Die Zeilen entsprechen jeweils einem Tag im Jahr. und es gibt in jeder Zeile immer nur eine 1 .
Ich versuche seit geraumer Zeit, alle einsen durch ein Wort zu ersetzen. Dabei soll in jeder der 10 Spalten immer etwas anderes für eine eins eingetragen werden. Am Ende sollen dann alle 10 Spalten in eine geschrieben werden, so dass ich dann einen Spaltenvektor habe in dem für jeden Tag des Jahres ein Wort steht.

Ich komme da leider echt nicht weiter und wäre für jegliche Hilfe dankbar.

Viele Grüße

SImon
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.11.2016, 11:41     Titel:
  Antworten mit Zitat      
Was hast du bisher versucht?
Soll in jeder Zeile pro Spalte das gleich stehen?

Vektor und "Wort" paßt nicht zusammen - hier musst du auf ein CellArray wechseln.
Belies dich also mal zu:
Code:

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
sdeluxe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 11:45     Titel:
  Antworten mit Zitat      
Danke, werde ich mal was zu lesen.

Also ich erstmal versucht, über eine if-Abfrage alle einesen durch ein Wort zu ersetzen. Das klappt schonmal nicht.

Dann habe ich versucht über "isnumeric" was zu machen. Da dachte ich erst es würde funktionieren, aber habe dann festgestellt, dass auch das nicht der Richtige Weg ist.
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: 14.11.2016, 12:09     Titel:
  Antworten mit Zitat      
Hallo sdeluxe,

Bitte poste den relevanten Code und erkläre, was "klappt nicht" bedeutet: Bekommst Du eine Fehlermeldung (welche?) oder weicht das Ergebnis von Deinen Erwartungen ab (schildere dann beides).
Ein kleines Beispiel könnte auch helfen, das Problem zu verstehen, vielleicht mit einer 4x3 Matrix. Bisher ist jedenfalls noch nicht klar, was Du erreichen möchtest.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 12:33     Titel:
  Antworten mit Zitat      
Ja ein Beispiel schadet vermutlich echt nicht. Ja in jeder Zeile einer Spalte soll am Ende das gleiche stehen.

Beispiel für die erste Spalte: idxJahresfolge 365x10 logical; J= 365x10 Cell

1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0

usw....


Code:
J=num2cell(idxJahresfolge);
if J(:,1)==1
    J(:,1)='UWH';
end


Fehler: Undefined operator '==' for input arguments of type 'cell'.

mit einem "=" Zeichen

Fehler: The expression to the left of the equals sign is not a valid target for an assignment.


Vielen Dank für eure Hilfe. Ich bin leider echt ein Anfänger was Matlab betrifft.
Private Nachricht senden Benutzer-Profile anzeigen
 
sdeluxe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 13:20     Titel:
  Antworten mit Zitat      
Also wenn ich die Bedingungen weglasse, schaffe ich es einzelnen Cells durch einen Text zu ersetzen aber sobald ich mehr als eine Zeile einer Spalte austauschen will gibt es eine Fehlermeldung:

Code:
J=num2cell(idxJahresfolge);

 J{1:365,1} = 'Text';


The right hand side of this assignment has too few values to satisfy the left hand side.
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: 14.11.2016, 13:42     Titel:
  Antworten mit Zitat      
Hallo,

folgendes sollte gehen:
Code:
J(1:365,1) = {'Text'};


Falls nicht, bitte reproduzierbares Beispiel zur Verfügung stellen.

Grüße,
Harald
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: 14.11.2016, 14:41     Titel:
  Antworten mit Zitat      
Hallo sdeluxe,

Code:
data = logical([1 0 0 0 0 0 0 0 0 0; ...
     0 0 0 1 0 0 0 0 0 0; ...
     0 0 0 0 0 0 0 1 0 0]);
J = cell(size(data));
J(data) = {'UWH'};
J(~data) = {0};
 


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 15:10     Titel:
  Antworten mit Zitat      
Klappt für den ersten Schritt ganz wunderbar. Damit versuche ich es weiter.

VIELEN DANK!
Private Nachricht senden Benutzer-Profile anzeigen
 
sdeluxe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 15:59     Titel:
  Antworten mit Zitat      
Code:
J=cell(size(idxJahresfolge));
J(idxJahresfolge(:,1))={'UWH'};
J(:,2)={'UWB'};
J(:,3)={'USH'};
J(:,4)={'USB'};
J(:,5)={'SWX'};
J(:,6)={'SSX'};
J(:,7)={'WWH'};
J(:,8)={'WWB'};
J(:,9)={'WSH'};
J(:,10)={'WSB'};
J(~idxJahresfolge)={0};


Damit komme ich schon sehr weit. Ich habe aber noch immer eine Matrix 365x10 und würde daraus jetzt gerne einen Spaltenvektor 1x1 draus machen indem ich alle Nullen lösche und allen Text in die erste Spalte schreibe. Da es sich ja um einen Typ Cell handelt können die Spalten nicht addiert werden, was gut wäre, da alles außer einer Spalte pro Zeile gleuch null ist. Gibt es eine Möglichkeit alle nullen zu löschen und alles andere in die erste Spalte zu schreiben?

Vielen Dank.

Simon
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: 14.11.2016, 18:26     Titel:
  Antworten mit Zitat      
Hallo sdeluxe,

Wieso erzeugst Du die Nullen dann zuerst? Einfacher wäre es doch, sie gleich wegzulassen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2016, 18:51     Titel:
  Antworten mit Zitat      
Die Matrix idxJahresfolge erstelle ich aus mehreren Spaltenvektoren. Diese werden unter nach verschiedenen Bedingungen und Inputparametern gebildet. Leider habe ich dafür keinen anderen Weg gesehen bzw. erstmal war es ausreichend. Leider falsch gedacht
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 16.11.2016, 10:36     Titel:
  Antworten mit Zitat      
Wenn du die Nullen in Char konvertiert hast, kannst du sie vorher per regexprep entfernen.

Die Zeilen zusammenfassen, wenn alle Elemente als Cell vorliegen würde mit horzcat gehen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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.