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

Häufigkeiten anzeigen mit 2 Attributen (Gewichtung)

 

Maria10
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2008, 10:29     Titel: Häufigkeiten anzeigen mit 2 Attributen (Gewichtung)
  Antworten mit Zitat      
Hallo!

Auch ich bin noch recht neu bei Matlab und habe ein, für euch hoffentlich kleines, Problem.

Und zwar geht es um die Auswertung eines Bestandes. Es sind die Werte
Zeit und Anzahl in einem Array vorhanden.
Nun soll ausgegeben werden wie oft welche Häufigkeit vorkommt (kein Problem mit dem hist-Befehl)
doch muss das Ganze noch mit der Zeit gewichtet werden. Das heisst
dass berücksichtigt werden muss wie lange der jeweilige Token in dem Bestand verweilt.

Demnach gibt es einen Vektor mit allen Zeiten (Zeit= R (:,1)) und
einen Vektor mit der Anzahl der Token (AnzahlToken = R (:,2))
die dann nach der Anzahl der Token in einem Bin (bin= [0:1:50]) sortiert werden sollen (unter Berücksichtigung der Zeit eben...).

Es schient mir dass hier der Histbefehl seine Grenzen erreicht. Habt ihr eine Idee?

DANKE!!
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.05.2008, 11:47     Titel:
  Antworten mit Zitat      
Moin,

könntest du das mit der zeitlichen Gewichtung noch etwas näher erklären? Im Moment bin ich noch nicht recht dahinter gekommen, wie das gemeint ist Rolling Eyes
Vllt. an nem Beispiel festmachen?!

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2008, 12:12     Titel:
  Antworten mit Zitat      
Sinn der Sache soll sein, dass der Bestand über die Zeit gemittelt wird.

Zum Beispiel befinden sich 3 Token, 2 Sekunden in dem Bestand und später 5 Token 4 Sekunden.
Somit wirken sich die 5 Token mehr auf den Bestand aus, da sie doppelt so lange drin sind.

Anzahl Zeit Bin [0:1:5]
3 4
4 5
5 6
4 8
3 1

....sollen z.B nach der Häufigkeit der Anzahl in den Bin sortiert werden sodass man weiss wie häufig, wieviele Token wie lange im Bestand sind und man dieses dann in einer Grafik ausgeben kann.

Prinzipiell: Anzahl * Zeit nach Anzahl sortiert...

Gruß und Danke fürs mitüberlegen!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.05.2008, 13:27     Titel:
  Antworten mit Zitat      
Achso...

Das lässt sich eigentlich relativ leicht lösen:
Code:

hist((R(:,1).*R(:,2)),[0:1:50]);
 

Ich hoffe ich habe dich richtig verstanden...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2008, 13:46     Titel:
  Antworten mit Zitat      
hm... so wird doch aber die Haeufigkeit des Ergebnisses aus R(:,1)*R(:,2) in die Bins sortiert und gezaehlt oder?

hier soll die Hauefigkeit von R(:,2) in den Bins gezählt werden aber eben "gewichtet" mit R(:,1), sodass wenn 3 Token 2 Sekunden im Bestand sind hinterher im Histogramm der Balken bei den 3 Token doppelt so hoch ist als wäre er eine Sekunde drin gewesen, und bei z.B. 4 Sekunden 4 mal so hoch (mit 4 gewichtet oder 4 mal gezählt, also 4 mal so wichtig Wink).

Somit soll hinterher über der 3 im Histogramm anstatt 2 mal ne 3 gezählt, 2*3 und 4*3 also 6 mal ne 3 stehen als Anzahl.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.05.2008, 14:24     Titel:
  Antworten mit Zitat      
Achso meinst du das...

Unter der Annahme das es sich um 50 mögliche Platzierungen handelt, würde ich sonst folgendes vorschlagen:
Code:

n = zeros(50,1);
ende = 50;
bin = 1:ende;
for i=1:ende
    n(i) = sum(R(R(:,1)==i,2));
end
bar(bin,n);
 


Das sollte klappen...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2008, 14:34     Titel:
  Antworten mit Zitat      
Hey...

cool, ausser dass die Spalten vertauscht waren klappts, auch bei anderen Plazierungen. Ich danke dir!!!!!!!! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 11:01     Titel:
  Antworten mit Zitat      
uiuiui... nun möchte ich aber auf mehr als ein Spaltenpaar zugreifen. Also auf eine Matrix (R) die ich zu Spalten zusammenfasse und dann wie oben verarbeiten möchte.

Die erste Spalte in B stimmt auch aber danach kommen nur noch 0... Embarassed
warum???

Hier der Code:

Code:
ende= 5;


B = zeros(ende,size(R,2)/2);
k=1;
for i=1:2:size(R,2)
    B(k,:)= sum(R(R(:,i)==i,i+1))
    k = k+1;
end
 


LG
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 27.05.2008, 11:36     Titel:
  Antworten mit Zitat      
Irgendwie würfelst du hier einiges durcheinander habe ich das Gefühl.

Erklär doch bitte nochmal, was du machen möchtest, denn dein jetztiger Code und der Code von oben haben inhaltlich nicht mehr viel gemeinsam, finde ich...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 12:43     Titel:
  Antworten mit Zitat      
Also der Sinn ist immer zwei, nebeneinanderliegenden Vektoren aus einer Matrix (R) zu ziehen, die Gewichtung von oben darauf anzuwenden und das Ergebnis in eine neue Matrix (B) zu schreiben.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Maria10
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 13.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2008, 15:17     Titel:
  Antworten mit Zitat      
guckt mal es sieht nun so aus... läuft aber immernoch nicht richtig. Woran könnte es liegen???

Code:
ende = 6;
bin = 1:ende;

B = zeros(ende,size(R,2)/2);
k=1;
for i=1:2:size(R,2)
    for k=1:6;
    B(k,:) = sum(R(R(:,i)==k,i+1));
    k = k+1;
    end    
   
end
 


Danke und LG
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 27.05.2008, 16:08     Titel:
  Antworten mit Zitat      
Moin Maria,

das sollte funktionieren:
Code:

ende = 6;
R = ceil(rand(10,6).*ende);
bin = 1:ende;
B = zeros(ende,size(R,2)/2);
k = 1;
g = 1;
for z=1:2:size(R,2)
    for k=1:ende
        B(k,g) = sum(R(R(:,z)==k,z+1));
    end
    g = g+1;
end
display(R);
display(B);
 


Es lag daran, dass du mit
Code:
B(k,:) = sum(R(R(:,i)==k,i+1));
immer die erste Zeile überschrieben hast. Du hast schon soweit richtig gedacht, allerdings müsstest du dich nochmal etwas in den Aufbau von Matritzen und Vektoren in Matlab einarbeiten dann klappts das nächste Mal vielleicht besser...

Gruß
Alex[/code]
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 2024 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.