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

wortfrequenzen : cellarray in matrix ?

 

anaise
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2013, 18:23     Titel: wortfrequenzen : cellarray in matrix ?
  Antworten mit Zitat      
Hallo,

ich min Matlab Anfängerin und bräuchte Hilfe bei der Umwandlung von cellarrays in eine matrix. Ich habe folgenden Datensatz: (314,7)

1 4 1 0 1 FADEN 1
1 5 3 5 3 KABEL 1
1 0 1 0 3 KETTE 1
1 0 1 0 3 BAUER 1
1 0 2 0 3 KETTE 2
1 0 1 0 3 KNABE 1
1 0 5 5 1 KABEL 3
1 0 1 0 1 KARTE 1
1 12 4 4 2 PAKET 1
1 0 1 0 2 FAHNE 1
1 0 1 0 2 LINIE 1
1 0 2 0 2 FAHNE 2
1 0 1 0 1 HAFER 1
1 0 1 0 1 MOTOR 1
1 18 3 5 3 TAFEL 1
1 0 1 0 3 STUBE 1
1 0 1 0 3 STUFE 1
1 0 2 0 3 STUBE 2
1 0 1 0 3 PLATZ 1
1 0 5 5 1 TAFEL 3
1 0 1 0 1 STAMM 1
1 25 4 3 2 WURST 1


Dieser wird als cell array importiert. Nun habe ich die Numerischen Daten in Spalte 1-5 & 7 zu einer Datei zusammengefügt und mit
r =cellfun(@str2num,r); in ein double array umgewandelt.
Nun würde ich gerne die Wörter, die in einem seperaten cell array namens words liegen, durch nummerische Werte ersetzen, da diese mehrfach vorkommen (80 in 314). Mein Ziel ist es mittels if & for Schleife eine Datei mit Häufigkeiten zu erstellen. Dazu habe ich eine Liste mit diesen 80 Wörtern (cell array) importiert, würde nun gerne diese mit Zahlen versehen um dann dies als "legende" für die if Schleife zu nutzen. Probiet habe ich es so :

words (:,2) = 1:80;
??? Conversion to cell from double is not possible.

Kann mir jmd. helfen?

( Für anregungen zur if-schleife wäre ich auch dankbar Smile )

LG Anaise
Private Nachricht senden Benutzer-Profile anzeigen


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 27.05.2013, 23:13     Titel:
  Antworten mit Zitat      
Versteh ich nicht ganz. Du willst also zählen, wie oft das Wort "STUBE" vorkommt, und diese zahl dann statt "STUBE" in dein CellArray schreiben?
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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: 28.05.2013, 06:10     Titel: Re: wortfrequenzen : cellarray in matrix ?
  Antworten mit Zitat      
Hallo anaise,

Der Typ des "Datensatzes" ist nicht klar: Ist das ein Text-File, oder ein Cell-String? Bitte benutze Standard-Matlab-Syntax, so dass das auf Anhieb klar wird, z.B.:
Code:
Data = {'1', '4', '1', '0', '1', 'FADEN', '1'; ...
etc.

Wenn "words" ein Cell-Array ist, kannst Du nicht einfach einen Double-Vektor anfügen:
Code:
words (:,2) = 1:80;
??? Conversion to cell from double is not possible.

Besser:
Code:
words(:,2) = num2cell((1:80).');

Das eigentliche Problem habe ich aber nicht verstanden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2013, 12:30     Titel: danke :) & weitere fragen
  Antworten mit Zitat      
^Hallo,

danke Smile das hat schon einmal weiter geholfen Smile
Ich bemühe mich trotzdem es nochmal deutlich zu machen. Evtl. wisst ihr ja einen eleganteren weg.
(Leider beschrieben die Einführungen, die ich gelesen hatte nur Vektoren und Matrizen, weshalb ich versuche damit zu arbeiten.)

Beschreibung Datensatz ( Randomisierungs - Datei):

blocknr; ttlpulse; stimulustype; delay; cycle; word; button;

Ziel: Durch if- & for-Schleifen häufigkeiten bestimmen.
Z.B. if run = 1 elseif stimulustype = 3 fprintf r(:,1) = wordnr;
(oder so in der Art...werde mich noch schlau machen müssen Smile )

Problem: Mehrfach vorkommende Wörter in Datensatz durch numerische Werte ersetzen.

Variabelen:
Name Size Bytes Class

r 314x6 15072 double
resp_button 314x1 2512 double
data 314x6 118874 cell
words 80x1 5600 cell
words1 314x1 21980 cell

1. Datensatz:
Code:

data = {'1', '4', '1', '0', '1', 'FADEN', '1'; ...
etc.  


nach überarbeitung:

Code:

r =  {'1', '4', '1', '0', '1', '1';...}

 



dann in <314 x6 double> mit

Code:

r =cellfun(@str2num,r);
r = ('1', '4', '1', '0', '1', '1';...)
 


Nun habe ich die Wörter aus "data" in die Variabele "words1" geschrieben.
Durch eine importierte Liste der 80 Wörter ist die Variabele "words" entstanden.

Nun möchte ich:

words (:,2) = 1:80;
??? Conversion to cell from double is not possible.

was ja nich geklappt hat und jetzt durch
Code:

words(:,2) = num2cell((1:80).'); % danke!
 


funktioniert.

Jetzt möchte ich die Wörter in "words1" durch die Zahle in words (:,2), die neben dem Wort in words(:,1) steht, ersetzen.

Ich durchstöbere weiterhin das Internet aber freue mich natürlich trotzdem über Hilfe und hoffe es ist nun verständlicher.

Liebe Grüße

Anais
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: 28.05.2013, 13:11     Titel: Re: danke :) & weitere fragen
  Antworten mit Zitat      
Hallo anaise,

Hat es einen Vorteil die Wörter durch Zahlen zu ersetzen? Meistens sind zusätzliche Abstraktions-Level nur Preogrammier- und Laufzeit-Fresser.

Ich vermute deshalb, Dein Problem liesse sich auch einfacher und direkter lösen.

Verstehe ich es richtig, dass Du einen Cell-Strings hast und für jedes Wort darin herausfinden möchtest, wie häufig es vorkommt? Das wäre dann:
Code:
c = {'a', 'b', 'a', 'c', 'b'};  % Beispiel daten
[b, i, j] = unique(c);
freq = histc(j, 1:length(i))

Nun kommt der i.te String in b freq(i) mal vor.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2013, 14:41     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für die Unterstützung.
ich dachte das if & for Schleifen nicht in cellarrays einsetzbar sind.
Da ich jetzt festgestellt habe das das geht Razz ist warscheinlich alle umstrukturierung umsonst geswesen.
Leider Brauche ich letztendlich nicht nur die Worthäufigkeiten, sonder muss, um zu sehen ob die Randomisierungsdateien ausbalanciert sind, feststellen können:

1. Wie häufig kommt Wort per Block mit Bedingung 1,2,3,4,5 vor und nach wievielen Wörtern wiederholt es sich durchschnittlich?

Falls du dazu Tipps hast freue ich mich Smile

LG Anaise
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: 28.05.2013, 17:04     Titel:
  Antworten mit Zitat      
Hallo anaise,

Zitat:
ich dachte das if & for Schleifen nicht in cellarrays einsetzbar sind.

Ich verstehe nicht, was das bedeutet. Man kann zwar in der Tat keine If-Bedingungen und FOR-Schleifen in ein Cell-Array einsetzen. Aber um genau zu sein, kann man IF und FOR sowieso in nichts einsetzen.

Auch "Wort kommt per Block mit Bedingung 1,2,3,4,5 vor" ist nicht ganz klar.
Wenn Du die Zahlen und die Wörter gemeinsam benötigst, ist es dann überhaupt sinnvoll, sie getrennt in unterschiedlichen Typen zu speichern? Oder wäre es dann nicht besser, sie gleich so vorliegen zu haben:
Code:
Data = {'1, 4, 1, 0, 1, FADEN'; ...

Dann wäre alle Information in einem String gespeichert und man kann einfacher nach Wiederholungen suchen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2013, 20:18     Titel:
  Antworten mit Zitat      
Hallo,

ich meinte damit das if-Schleifen bei bestimmten Datentypen (z.B. gemischten cellarrays) in Matlab nicht einsetzbar sind.

Da ich jetzt weis das das kein Problem ist, hast du recht das der Datensatz

Code:

data = {blocknr, ttlpulse, stimulustype, delay, cycle, word, button;...
data = {'1',           '4',            '1',           '0',      '1', 'FADEN', '1'; ...
 
 


sinnvoller ist.

Daher versuche ich jetzt auf Basis dieses Datensatzes einen Datensatz 'freq' zu erstellen, der ungefähr so aufgebaut ist:

Code:

freq={word, anzahl_word_gesamt, anzal_word_block1:6, stimulustype_in_block1:6, cycle_in_block1:6;.....
freq={'STEIN', '3', '1', '0', '0', '0','2','0','1', '0', '0', '0','4','0';.....
 


Dies soll für 6 verschiedene Dateien "Data" erstellt werden.

Danke!

Viele Grüße

Anaise
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.