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

Wertabfrage eine Matrix durch Indizes eines Vektors

 

Seb85
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 15:34     Titel: Wertabfrage eine Matrix durch Indizes eines Vektors
  Antworten mit Zitat      
Hi,
folgendes Problem:
Ich habe einen Vektor (Nx1) und eine Matrix (Nx6).
In dem Vektor stecken die Zahlen 0 bis 12 und die Matrix besteht aus Farbwerten 0 bis 255 mit 6 Kanälen.
In meiner Schleife möchte ich dann zunächst alle 0 aus diesem Vektor entfernen, dafür gehe ich von 1 bis 12 alles durch. Nachdem ich z.B. alle Stellen des Vektors, die eine 1 haben, soll er mir von diesem entstandenen Array ein randsample erstellen, das 2/3 der länge hat, das andere Drittel wird in einem anderen Vektor gespeichert.
Diese werden danach mit vertcat aneinander verknüpft. Rauskommen sollte danach ein Vektor mit den jew. Indizes an denen KEINE Nullen sind (oder?), nunja, auf jedenfall möchte ich im nächsten Schritt diese Vektoren (a_train bzw. a_test) auf meine oben genannte Matrix anwenden, um mir die Werte an den Stellen auszugeben, an den mein Vektor zuvor keine Nullen aufweist.

Code:

for i=1:nLabel;
    a1=find(B_resh==i);
    N1=length(a1);
    a_rs1=randsample(N1, round(N1*2/3));
    a_rs2=setdiff(a1, a_rs1);
    a_train=vertcat(a_train,a_rs1);
    a_test=vertcat(a_test,a_rs2);
    i=i+1;
end
X_train=A_resh(a_train,:);
X_test=A_resh(a_test,:);
Y_train=B_resh(a_train);
Y_test=B_resh(a_test);
 


Rauskriegen tue ich aber wiederum Nullen in meinem Y_train..

wo liegt mein Fehler ?^^

edit by denny: bitte die Codeumgebung verwenden. Danke!
Private Nachricht senden Benutzer-Profile anzeigen


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2011, 16:26     Titel:
  Antworten mit Zitat      
Code:

A=A_resh(B_resh>0,:);
v=randperm(size(A,1));
t1=v(1:floor(2/3*length(v1)));
t2=v(ceil(2/3*length(v1)):end);
X_train=A(t1,:);
X_test=A(t2,:);

 


Meinst du soetwas?
 
Seb85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 16:31     Titel:
  Antworten mit Zitat      
nja nicht ganz, wie gesagt, die Aufteilung muss s chon 2/3 zu 1/3 sein und ich verstehe nicht was du mit v1 meinst Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2011, 17:03     Titel:
  Antworten mit Zitat      
Hallo

habe schon mehrmals gelesen, aber
irgend wie verstehe ich nicht was du da erreichen willst.
Bitte Beispiel!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2011, 17:06     Titel:
  Antworten mit Zitat      
Öh,
bei mir im Beispiel ist A_resh deine (nx6) Matrix und B_resh dein (nx1)Vektor und ja, da war wohl noch nen Tippfehler drin

Code:

A_resh=randi([0 255],1000,6); %deine Matrix
B_resh=randi([0 12],1000,1);   %dein Vektor

A=A_resh(B_resh>0,:);          % deine Matrix ohne die Zeilen an denen der Vektor Nullen hat
v=B_resh(B_resh>0);             %dein Vektor ohne Nullen
v=randperm(length(v));      %dein Vektor ohne Nullen gemischt

t1=v(1:floor(2/3*length(v)));  %2/3 deines Vektors ohne Nullen
t2=v(floor(2/3*length(v))+1:end); %1/3 deines Vektors ohne Nullen

A_train=A(t1,:);     %Trainingsmatrix?
A_test=A(t2,:);
B_train=v(t1,:);    %Trainingsvektor?
B_test=v(t1,:);


 
 
Seb85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 17:18     Titel:
  Antworten mit Zitat      
B_train=v(t1); %Trainingsvektor?
B_test=v(t);

oder ?Wink

Also, was ich damit erreichen will:
Es handelt sich um eine Datenmatrix mit 6 Kanälen aus einem Luftbild, der Vektor bildet meine Referenzdaten mit den 12 Klassen (z.B. 0 = Hintergrund, 1= Weizen, 2=Wald usw.)
Auf diese soll dann ein Random Forest angewendet werden um eine Klassifikation durchzuführen.
Was mir jetzt noch fehlt ist, dass ich auch sicher sein kann das alle Klassen in meinem perm-Vektor vorhanden sind, daher dann doch lieber mit schleife schreiben oder ?
Worst-Case wäre ja z.B. ich habe nur 5 mal den Eintrag 1 (Also für die Klasse Weizen) und die würde unglücklicherweise wegfallen wenn ich 2/3 davon nehme.
Hoffe das war verständlicher Smile


€: hatte vergessen, dass sich das Verhältnis 2/3 zu 1/3 aus ein und demselben Vektor zusammenzustellen ist, daher doch lieber mit setdiff arbeiten ? Brauche ja diejenigen Indizes test-Vektor die ich im train-Vektor nicht erfasst habe
Private Nachricht senden Benutzer-Profile anzeigen
 
Seb85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 18:31     Titel:
  Antworten mit Zitat      
Code:

a_train=[];
a_test=[];
for i=1:nLabel %nLabel;
    a1=find(B_resh==i);
    a_rs1=randsample(a1, round(length(a1)*2/3));
    a_rs2=setdiff(a1, a_rs1);
    a_train=vertcat(a_train,a_rs1);
    a_test=vertcat(a_test,a_rs2);
    i=i+1;
end

X_train=A_resh(a_train,:);
X_test=A_resh(a_test,:);
Y_train=B_resh(a_train);
Y_test=B_resh(a_test);
 


Nu hab ich die Nullen raus, was mich allerdings wundert, wieso mein Y_train und Y_test so schön geordnet sind...d.h. es folgen z.B. erst alle 1, dann die 2, dann die 3 usw, müsste doch eigentlich aucjh mixed sein ?^^
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2011, 19:49     Titel:
  Antworten mit Zitat      
Zitat:
Nu hab ich die Nullen raus, was mich allerdings wundert, wieso mein Y_train und Y_test so schön geordnet sind...d.h. es folgen z.B. erst alle 1, dann die 2, dann die 3 usw, müsste doch eigentlich aucjh mixed sein ?^^


Weil SETDIFF intern UNIQUE anwendet und UNIQUE sortiert ja die Daten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Seb85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 20:02     Titel:
  Antworten mit Zitat      
Achso, ok, das erklärts natürlich!
So lange die richtigen Werte im Nachhinein abgegriffen werden isset ja auch net so wild..naja, danke
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 21.03.2011, 20:36     Titel:
  Antworten mit Zitat      
Na ja UNIQUE eliminiert ja doppelte Werte, man verliert ja die Daten, ob
es bei dir sinnvoll ist.

also z.B liefert
Code:

setdiff([3 2 4 4 2 2 1 0],[0])
 


Zitat:

>> 1 2 3 4
Private Nachricht senden Benutzer-Profile anzeigen
 
Seb85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 15.03.11
Wohnort: ---
Version: 7.11.0 (R2010b)
     Beitrag Verfasst am: 21.03.2011, 22:05     Titel:
  Antworten mit Zitat      
da mir ja nur die Indizes ausgegeben werden, habe ich keine doppelten Werte, von daher ist das durchaus i.O. Wink
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.