|
|
Matrix um leere Spalte erweitern und diese mit Schleife fül |
|
Nemo2002 |

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.11.2013, 15:36
Titel: Matrix um leere Spalte erweitern und diese mit Schleife fül
|
 |
|
 |
|
Hey Leute,
ich hätte nochmal eine Frage wo ich nicht weiterkomme....vll kann mir ja wer helfen.
Folgendes Problem:
Ich habe eine Matrix mit 9 Spalten (Zeilen hängen je nach Datensatz ab, z.b. 49000x9 dataset). Die Matrix heißt "ds"
Jetzt würd ich gern eine neue Spalte hinzufügen, mit dem Namen "vote". Diese Spalte soll dann aber durch eine Schleife gefüllt werden.
Ich würde gern, dass MATLAB anhand einer anderen Spalte der Matrix die neue Spalte füllt.
Hier ein Beispiel: MATLAB soll sich in der Matrix die Spalte "source" angucken und je nach dem dort vorhandenen Wert die Spalte "vote" füllen.
Z.b. wenn "source" 1 ist, dann schreib in "vote" auch 1 und wenn "source" 2 ist, dann schreib in "vote" 0.
Das wollte ich anhand einer if/else schleife machen.
Das wollte ich dann für insgesamt 9 Werte machen, also "source" kann zwischen 1 und 9 liegen und deswegen würd ich für jedes Argument ne elseif-Schleife machen....
Nur, wie kann ich das sinnvoll zusammenfügen? Bin da grad etwas aufgeschmissen und versteh den Trick dabei nicht ganz...ich bin mir sicher, dass es ziemlich einfach ist, aber ich komm einfach nicht drauf....
Über Hilfe wäre ich sehr dankbar
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.11.2013, 16:01
Titel:
|
 |
Hallo,
Testen auf Gleichheit musst du mit == machen.
ds.source steuert zwar die ganze Spalte an, aber eine if-Abfrage würde hier testen, ob die gesamte Spalte 1 ist.
Ich würde es so machen:
Sollte es eine Arithmetik geben, über die sich vote aus source ergibt, wäre das natürlich einfacher.
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.11.2013, 21:30
Titel:
|
 |
|
 |
|
danke für den Tipp harald, hab es mal getestet und funktioniert super!
naja, ne Arithmetik soll es im Endeffekt schon sein....erinnerst dich ja sicher noch an meine andere frage, dort waren ja votes, views und comments gegeben.
Ich habe jetzt durch das einlesen der DAten gruppen anhand von source gebildet (1-9) und dan nauch den Mittelwert der GRuppen für votes, views und comments...jetzt will ich in dem 2. datensatz die mittelwerte einfügen, also wenn source=1 soll der vorher gespeicherte mittelwert in allen zeilen eingefügt werden.
Das ist mein Ziel, wollte es jedoch erstmal in Etappen machen und für jede Spalte eineln...oder gibt es da vll einen Trick der das sofort für 3 Spalten allgemein macht aus einer Quelle?
Ich habs jetzt mal sehr umständlich gemacht.....
Die jeweiligen Werte die dort eingetragen werden hab ich aus einem 1x3 double
Den Median berechne ich so:
Als beispiel ist steht z.b. ds_test.source_double == 1 für "median_android"....kann ich es irgendwie programmieren, dass er mir automatisch die 3 Werte auf der Datei zieht? Dort sind die Werte ja bereits in 3 Spalten und naja, es würd mein Programm sehr vereinfach, vorallem wenn sich median_andriod ändert...so muss ich ja alles per hand eintragen^^
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 11:57
Titel:
|
 |
Hallo,
mir ist eine Idee gekommen, wie das eleganter gehen sollte:
Bei Comments brauchst du nichts zu überschreiben, der Vektor ist ja schon mit Nullen initialisiert.
Bei views kannst du denselben Trick anwenden wie bei vote.
Beim letzten Teil verstehe ich die Frage nicht.
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 12:10
Titel:
|
 |
danke, so ist es deutlich einfacher und übersichtlicher....
Dann versuch ich es mal genauer zu erklären.....median_android gibt mir die Werte für votes, comments udn views...bisher änder ich die ja manuell in der Eingabe, ist es denn möglich ,dass MATLAB sich diese Werte direkt aus median_Android zieht? Das ist ein 1x3 double.....
Dort steht dann z.b. 2 0 4 drin, also 2 votes, 0 comments und 4 views.....
nehmen wir also an ds.source_double == 1 bezieht sich auf die Werte aus median_android.
Bislang würd ich es ja so machen:
ich trage also die Werte 2, 0 und 4 manuell aus median_android raus, kann ich das irgendwie automatisieren, dass MATLAB sich die wertte jeweils aus median_android direkt zieht?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 12:26
Titel:
|
 |
Hallo,
du kannst das oben beschriebene anwenden.
Erstelle dir eine Matrix mit 3 Spalten und Zeilen für 1-9 (die erste Zeile wäre also dann das median_android), und dann sollte das Befüllen wie dargestelllt klappen.
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 12:47
Titel:
|
 |
okay, da hab ich jetzt eine Matrix 9x3 double mit den ganzen verschiedenen möglichkeiten untereinander
aber wie kann ich denn jetzt die matrix mit meiner anderen kombinieren?
ich müsste ja 3 Spalten je Zeile auf einmal ansteuern, dass er die übernimmt....
bzw. um es zu verstehen, meine matrix heißt medi.mat
hab sie erstmal mit load medi.mat geladen.....
Meine 1. Idee war:
Dies ist aber blödsinn, da ich ja 9 Spalten ansteuer, ich aber nur die 1. haben will, also müsste ja überall medi.1 stehen und dann die jeweiligen Zeilen von 1-9....irgendwie happert es da noch...kansnt du mir da vll noch einen Tipp geben?
2. Idee: ich kann ja mit 2.3 die 2. Zeile und 3. Spalte ansteuern....also müsste ja folgendes gehen:
nur wie füge ich hinzu, dass er sich dabei auf medi.mat beziehen soll?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 18:52
Titel:
|
 |
Hallo,
was du schreibst, ist für mich ein Rätsel.
medi.1 etc. ist keine gültige MATLAB-Syntax. Ich weiß also nicht, was das sein soll.
Zitat: |
ich kann ja mit 2.3 die 2. Zeile und 3. Spalte ansteuern. |
Nein, dazu müsstest du Zeilen-Spaltenindizierung verwenden:
matrix(2,3)
Wenn du eine .mat-Datei lädst, werden die darin enthaltenen Variablen in den Workspace geladen. Variable und Datei können gleich heißen, das ist aber eher die Ausnahme - daher sollte man da genau unterscheiden.
Mein Vorschlag war so gedacht:
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 19:30
Titel:
|
 |
hey Harald, danke für deine Antwort, aber irgendwie versteh ich deine Vorgehensweise nicht, stehe da auf dem Schlauch.
Ich mache meine 9x3 Matrix so:
(deswegen auch der Name medi eben)
Und daraus möchte ich jeweils die Werte ansteuern, wenn jetzt also die 1. Spalte 3; 3; 2; 2; 2; 2; 3; 1; 2 ist, also so wie bereits oben von dir vorgeschlagen
nur will ich jetzt eben erreichen, dass mir votes_values direkt auf die Matrix zugreift, also die 1. Spalte mit den jeweiligen Zeilen.....damit ich die Änderungen nicht immer händisch machen muss.
Deine Matrix bezieht sich ja auf die Spalte mit der ich vergleichen will und nicht auf meine median-Werte oder seh ich das falsch?
Tut mir sehr leid, wenn ich mich so "dämmlich" anstell....
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 19:47
Titel:
|
 |
Hallo,
hast du den Vorschlag denn mal ausprobiert?
Meines Erachtens sollte er das machen, was du möchtest. Denn ob du die Werte direkt hinschreibst oder als Spalte aus einer Matrix ziehst, sollte egal sein.
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 20:01
Titel:
|
 |
oh gott, das ist mir jetzt peinlich
Ich Idiot hab das einfach so von dir kopiert, mit dem Matrix und das gab bei mir einen Fehler.....jetzt, als ich das aber in den namen meienr matrix umgeändert hätte funktioniert es perfekt
vielen dank
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 20:17
Titel:
|
 |
Hallo,
bei Fehlern bitte immer den Fehler angeben. Dann kann man ggf. auch da weiterhelfen :)
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 21:23
Titel:
|
 |
okay, werd ich machen...eine Frage hab ich noch,
ich will jetzt 4 Spalten in csv exportieren.
id, votes, comments und views
Das funktioniert auch alles, nur er gibt mir die 6-stelligen Zahlen der id nicht richtig wieder, bei den 5 stelligen funktioniert es:
21523
87152
182789
312571
246776
86278
21523
87152
1.8279e+05
3.1257e+05
2.4678e+05
86278
Weißt du vll woran das liegt?
Ich hab es so programmiert:
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.11.2013, 23:20
Titel:
|
 |
Hallo,
das ist schon richtig, nur das Format ist eben nicht so, wie du's dir vorstellst.
Versuchs mal mit dlmwrite und dem 'precision'-Argument.
Grüße,
Harald
|
|
|
Nemo2002 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 26.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.11.2013, 00:17
Titel:
|
 |
danke ,das hab ich jetzt gelöst
und gleich direkt wieder ein neues problem...ich will überschriften mit reinbringen in die csv-datei, hab folgenden code:
Error using dlmwrite (line 118)
In 'MATLAB:dlmwrite:Attribute', parameter {1} must be a scalar.
Error in insert_medians_EINFACH (line 21)
dlmwrite('solution2.csv',headers,solution,'precision',6,'delimiter',' ');
Der Fehler ist, dass Headers eine 1x4 cell ist während solution eine 149751x4 double.
Wie kann ich die auf das selbe Format bringen? Hab mit cell2mat probiert aber das geht nicht...kansnt du mir vll noch einmal helfen?
Oder kann ich irgendwie die headers aus dem ds_test dataset mit rausziehn? bisher nimmt er nämlich nur die spalten, ohne headers.....
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|