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

bestimmte Zeilen aus Matrix auswählen

 

Julia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 14:52     Titel: bestimmte Zeilen aus Matrix auswählen
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:

Ich habe eine Matrix mit 5 Spalten und vielen Zeilen. In der ersten Spalte stehen meine Zahlen nachdenen ich selektieren möchte. Weil es recht viele Zahlen sind und nicht alle Werte von 1: 6598 vorkommen und sich die Zahlen doppeln habe ich zuerst über den unique befehl mir alle Zahlen aus Spalte 1 herausgeben lassen.

Nun folgendes: Ich habe in der ersten Spalte den Wert 1 stehen, wenn dies also stimmt, dann soll er mir die restlichen vier dazugehörigen Spalten in eine neue Matrix schreiben.
Da ich das bei vielen Tabellen machen muss, wäre es nicht schlecht eine Schleife darum zu bauen.

Schön wäre auch, wenn ich in dem Namen meiner neuen Matrix, den Wert aus der ersten Spalte wiederfinde.

also beispielsweise

1 80 0 1991 76
8 60 0 1958 116
1 80 0 1991 76
6 89 0 1972 104
3 45 0 1996 2
3 89 0 2010 97

in einer neuen Matrix sollen nun alle Werte stehen, die zu der 1 in der ersten Spalte gehören, für die 3 genauso usw.

ich hab auch schon was dazu gefunden, allerdings funktioniert das noch nicht ganz.
Für eine einzige Zahl funktioniert das so:

data_neu=data(data==3,: )

aber ich möchte das ja in einer Schleife ablaufen lassen für alle Zahlen und am besten den Namen data_neu_3 haben.

Kann mir einer von euch helfen?

Liebe Grüße


rainer87gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 15:13     Titel:
  Antworten mit Zitat      
falls ich dich richtig verstanden habe, war dein ansatz schon nicht verkehrt.
Code:

idx=unique(matrix(:,1)) %indizes die es gibt.
neue_matrizen=cell(max(idx),1);

for k=1:length(idx)
subidx=idx(k)
neue_matrizen{subidx}=matrix(matrix(:,1)==subidx,2:end);
end

%zugriff auf die matrizen ist dann halt mit
neue_matrizen{dein_index_aus_der_ersten_spalte}

 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2012, 15:18     Titel:
  Antworten mit Zitat      
Hallo,

hier eine Möglichkeit:

Code:
num = unique(M(:,1));
C = [num2cell(num), arrayfun(@(x) M(M(:,1) == x, 2:end),num , 'Uniformoutput', false)]


Ich würde dringend davon abraten, Matrizen erst zur Laufzeit bestimmte Namen zu geben, da es mit der Weiterverarbeitung dadurch automatisch schwierig wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 15:40     Titel:
  Antworten mit Zitat      
ich danke euch, beide Codes funktionieren

Ich möchte nun die Daten die in der {} stehen weiterverarbeiten und darin immer nach der ersten Spalte sortieren ...
geht das auch noch so schnell?

Also ihr habt jetzt nach der ersten Spalte selektiert, jetzt hab ich Matrizen mit 4 Spalten und alle Werte sollen über den befehl sortrows nach der neuen ersten Spalte sortiert werden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2012, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Julia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 16:19     Titel:
  Antworten mit Zitat      
Gut...

tut mir leid, wenn ich hier immer wieder mit neuen Fragen komme, aber so nen Profi in Matlab bin ich leider (noch Wink ) nicht.

ich hab jetzt ein bisschen mit xlswrite herumgespielt.
weil es bei mir ganz viele daten sind, die ich wahrscheinlich nur einmal kurz brauche ist mir der aufwand zu groß jede einzelne matrize abzuspeichern.
deswegen hab ich auch wieder an eine Schleife gedacht.

Ich möchte jede einzelne Matrize in eine eigene Arbeitsmappe schreiben.
das geht über

xlswrite('Y:\Gruppen\Mais.xls',neue_matrizen{mein_index},mein_jeweilige_Arbeitsmappe);

ich hab insgesamt 3930 Zeilen (wo aber wie schon vorher gesagt, nicht jede Zahl vorkommt, maximale Zahl ist 8271) und für jede dieser Zeile habe ich eine Matrix, die immer fortlaufend in eine Arbeitsmappe des bestehenden Datei Mais abgespeichert werden soll.

Ich brauch doch dafür 2 For-Schleifen oder?
Aber in Schleifen basteln bin ich noch nicht gut Sad
 
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.