|
|
simple (?) loop mit if-end Verbindung und Tabellen-Daten |
|
laura_li |

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.03.2017, 13:00
Titel: simple (?) loop mit if-end Verbindung und Tabellen-Daten
|
 |
Hi!
Ich möchte gerne, dass die unten angeführte Loop für jedes Event rausliest, ob die Variable 'type' einer der Werte in 'BE.sentence' entspricht. Sollten sie identisch sein, dann soll der Wert in BE.accuracy übernommen werden für die Events.
so sehen die Werte ungefähr aus (events und BE.sentence sind nicht geordnet)
events: 5 15 22 12 18
BE.sentence 12 15 18 22 5
BE.accuracy 1 0 1 1 0
Ich hoffe, dass mir jemand helfen kann.
[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
|
|
|
|
|
eRo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 06.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2016a
|
 |
|
|
 |
|
Verfasst am: 08.03.2017, 14:27
Titel:
|
 |
Hi,
Ich würde mir mal die Dokumentation zu find anschauen.
sowas wie, falls ich dein Problem korrekt verstanden habe.
In der Richtung hätte ich angefangen und geschaut ob es was sinnvolles bringt. Hab das jetzt selber noch nicht probiert. Falls das doubles sind musst du eventuell mit der Ungenauigkeit aufpassen (steht auch in der find-Doku). Da könnte noch ein "Vertrauensintervall" auf dich zukommen.
Viel Erfolg beim EEG-Spielen, die Daten sind meist sehr unfreundlich.
|
|
|
laura_li |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.03.2017, 15:15
Titel:
|
 |
Vielen Dank für den Tipp!
Egal wie ich vorgehe, ich krieg immer diese Fehlermeldung:
You cannot subscript a table using linear indexing (one subscript) or multidimensional indexing (three or more subscripts). Use a row subscript and a variable subscript.
Hättest du eine Idee, was damit genau gemeint ist?
|
|
|
eRo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 06.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2016a
|
 |
|
|
 |
|
Verfasst am: 08.03.2017, 15:27
Titel:
|
 |
mh...scheint irgendwas haut mit deiner Indizierung nicht hin. Versuch mal dir aus deiner Table gezielt einen Wert rauszupicken (Ich arbeite nicht mit tabels, von daher hab ich da keine Erfahrung mit). In der Doku zu Table Properties kannst du anfangen. Da wird das handling von tables beschrieben.
Die Fehlermeldung sagt dir, dass du die Indizierung nicht wie in einer Matrix machen kannst (also var(1,2) , var(2,1) oder ähnliches) du sollst die Zeile und Variable/Spaltenname (so wie ich das in Doku gelesen habe) verwenden.
Hoffe das hilft ein wenig.
|
|
|
laura_li |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.03.2017, 19:48
Titel:
|
 |
Ich habe die Daten aus der table in eine normal matrix "übersetzt". jetzt wird mir zwar kein Fehler mer angegeben, dafür passiert aber einfach nichts.. Sprich die VAR.event.accuracy Variable wird nicht aufgefüllt mit den BE.accuracy Werten...
woran könnte das liegen?
|
|
|
eRo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 06.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2016a
|
 |
|
|
 |
|
Verfasst am: 09.03.2017, 11:09
Titel:
|
 |
|
 |
|
Moin,
Also mit table2array machst du ein array. Danach baust du das array aber wieder in ein struct um (BE.sentence <- struct).
Von der Logik her versteh ich deinen Code so
(Unter Annahme alle deine Arrays in den Loops sind 1-dim Vektoren):
Vom ersten bis letzen Element deines VAR.event (struct!) willst du schauen, ob das an der exakt gleichen Stelle stehende Element von BE.sentence identisch ist.
Also VAR.event(3) == BE.sentence(3) zum Beispiel.
Bei deinen Beispielvektoren wäre das nur bei der 15 der Fall (in beiden Vektoren an der 2. Stelle).
Das Verwenden der Indentität (==) ist bei doubles aber kritisch. Doubles weisen immer einen Rundungfehler auf. Falls alle Zahlen der Arrays ganzzahlig sind kannst du versuchen, sie in Int32 umzuwandeln.
Ich empfehl dir wirklich mal die find-Funktion auszuprobieren. In der Doku dazu ist auch die Rundungproblematik bei doubles gut veranschaulicht. Es kann sein, dass dein Code wunderbar funktioniert, aber 15,00001 == 14,99999 geht halt nicht auf.
Maximale Erfolge
eRo
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.03.2017, 11:44
Titel:
|
 |
Hallo,
zur Frage, was dies bedeutet:
Zitat: |
You cannot subscript a table using linear indexing (one subscript) or multidimensional indexing (three or more subscripts). Use a row subscript and a variable subscript. |
Es steht ja eigentlich wortwörtlich da. Wenn die Table-Variable T heißt, dann muss man mit
indizieren, nicht etwa mit T(idx) oder T(idx1, idx2, idx3).
Allerdings sehe ich nicht, wo das im ursprünglich geposteten Code vorkommt.
Bitte immer die komplette Fehlermeldung posten, damit man sieht, auf welche Codezeile sie sich bezieht.
Eine Lösung für das von eRo beschriebene Problem ist, statt auf Gleichheit auf kleinen Unterschied zu testen, also
statt x == y
Wenn weitere Probleme bestehen, wäre es hilfreich, wenn du mal ein komplett reproduzierbares Beispiel postest.
Grüße,
Harald
|
|
|
laura_li |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.03.2017, 16:17
Titel:
|
 |
|
 |
|
eRo hat Folgendes geschrieben: |
Also mit table2array machst du ein array. Danach baust du das array aber wieder in ein struct um (BE.sentence <- struct). eRo |
das habe ich gemacht, weil ich Mühe hatte, werte aus der table zu lesen, BE.sentence separat auszugeben als struct wäre vermutlich nicht nötig und für echte programmierer wie euch vermutlich auch recht unschön Ich bin leider noch ganz am Anfang meiner Programmier-Fähigkeiten, daher wohl noch etwas umständlich
eRo hat Folgendes geschrieben: |
Vom ersten bis letzen Element deines VAR.event (struct!) willst du schauen, ob das an der exakt gleichen Stelle stehende Element von BE.sentence identisch ist. eRo |
Nein, ich habe mich etwas ungenau ausgedrückt. ich habe 150 aneinander gereihte Epochen von jeder Versuchsperson (eine EEG aufzeichnung). Jede dieser Epochen ist gekennzeichnet dadurch, dass ein Satz präsentiert wurde. der gleiche Satz wurde zwischen 3 bis 5 mal gezeigt. In VAR.event.type steht die Zahl, die für den bestimmten Satz steht. Beispielsweise für die ersten 5 Epochen die Zahl "12", für die nächsten 3 die Zahl "22". In einer von dieser EEG aufzeichnung losgelösten Tabelle habe ich wieder die Zahlen repräsentativ für den Satz der gezeigt wurde (BE.sentence), und ob die Versuchspersonen diesen Satz richtig beantwortet haben (BE.accuracy).
Jetzt will ich diese BE.accuracy an die jeweils passenden Epochen anfügen.
Vielen Dank für diesen find-Input! durch den obigen code weiss ich, an welcher Position von BE.sentence der selbe Satz wie in der Epoche zu finden ist.
was ich jetzt noch machen muss, ist dass ich die genau gleiche row, col info für BE.accuracy nehme und diesen Wert in VAR.event(i).accuracy einlese.
und das probier ich jetzt mal ...
|
|
|
eRo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 06.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2016a
|
 |
|
|
 |
|
Verfasst am: 09.03.2017, 16:28
Titel:
|
 |
Tach,
Freut mich, dass es was gebracht hat. Ich hab persönlich noch nie mit tables etc. gearbeitet, deswegen fehlt mir da das feeling für die Syntax. Ein "echter Programmierer" bin ich auch nicht, eher Beginner in der 2. Klasse.
Weiterhin viel Erfolg mit deinen EEG-Daten. Die sind echt nicht ohne, weiß ich aus eigener Erfahrung.
eRo
|
|
|
laura_li |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.03.2017, 16:35
Titel:
|
 |
eRo hat Folgendes geschrieben: |
Weiterhin viel Erfolg mit deinen EEG-Daten. Die sind echt nicht ohne, weiß ich aus eigener Erfahrung.
eRo |
yup.. das merk ich auch!
____
So, ich merk grad, dass mir der Code auf diese Weise zwar die erste Epoche mit dem richtigen Wert füllt, leider aber alle anderen nicht.
|
|
|
eRo |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 06.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2016a
|
 |
|
|
 |
|
Verfasst am: 10.03.2017, 11:23
Titel:
|
 |
ich würde mir zuerst anschauen wie hoch er das i zählt
einfach mal
dann tickt dir das im Workspace hoch.
gibt dir Anzahl von rows, cols,...in dem Table. Schau dir mal an was da überhaupt rauskommt. Ein laufindex ist ja immer was 1-dim, vielleicht nimmt er die falsche Dimension aus deinem VAR.event.type
Aus dem code den du gepostet hast kann man dazu nicht viel sagen.
eRo
|
|
|
laura_li |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 05.03.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.03.2017, 14:55
Titel:
|
 |
eRo hat Folgendes geschrieben: |
vielleicht nimmt er die falsche Dimension aus deinem VAR.event.type
|
Ich habs jetzt! Du hattest recht, mein Fehler war es size statt length zu nehmen! wenn ich das ersetze, dann klappts tatsächlich! Vielen Dank für deine Hilfe!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|