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

Zeilen mit gleicher Spalte in extra Array zerlegen

 

Cappaja
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 11.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 18:07     Titel: Zeilen mit gleicher Spalte in extra Array zerlegen
  Antworten mit Zitat      
Hallo,

ich habe ein extrem großes Array das u.a. die Spalte ID besitzt. Es gibt maximal 32 verschiedene ID's und alle Datensätze mit derselben ID möchte ich nun jeweils in ein extra Array ablegen. Wie stelle ich das an?
Die Matrix ist bereits nach ihrer ID aufsteigend sotiert. Die vorkommenden Datensätze pro ID sind zudem unterschiedlich groß.

Für Eure Hilfe wäre ich sehr dankbar!

Gruß Cappaja
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

soll das für eine oder für alle ID passieren?
In welcher Form liegen die Daten genau vor? Insbesondere, wie sieht das mit der unterschiedlichen Größe aus?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 11.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 20:51     Titel:
  Antworten mit Zitat      
Hallo Harald,

Für jede der 32 ID möchte ich genau 1 Matrix. Ein Datensatz besteht aus 4 float Werten. Ich habe in meiner Textdatei 500.000 Datensätze, davon können 8 Datensätze die ID=2 haben und 10 Datensätze die ID=3. Das würde schonmal eine Matrix der Größe 4x8 für ID=2 und eine Matrix 4x10 für ID=3 geben. So meinte ich das mit den unterschiedlichen Größen in Bezug auf die Dimension der Matrix.

Gruß Cappaja
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.03.2011, 21:52     Titel:
  Antworten mit Zitat      
Hallo,

dann hast du 32 Matrizen, und was machst du mit ihnen? Sinnvoller wäre es meines Erachtens, die in Cell Arrays unterzubringen.
Ich gehe mal davon aus, dass die ID in der 1. Spalte ist. Dann wäre z.B. folgendes denkbar:

Code:
c = cell(1,32);
ind = [0; find(diff(M(:,1)) > 0); size(M,1)];
for I=1:32
    c{I} = M(ind(I)+1:ind(I+1),:);
end
 


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 11.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2011, 17:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

erst einmal Danke für die Antwort. Ich erhalte danach lediglich 32 Zellen der Größe 2x4 mit unterschiedlichen IDs, das ist nicht das wonach ich gesucht habe. Vielleicht formuliere ich am besten mein ursprüngliches Problem, denn mittlerweile glaube ich ebenfalls das die Unterteilung in einzelne Matrizen bzw. Zellen überflüssig sein könnte.

Ich habe es jetzt geschafft alle relevanten Zeilen aller Textdateien in eine riesige Matrix zu packen. Der nächste Schritt besteht darin, die Matrix nach identischen Zahlenpaaren bestehend aus ID (Spalte 1) und Timestamp (Spalte 2) zu durchsuchen, um diese neu selektierten Zeilen anschließend über die Spalten 3 und 4 zu korrelieren.

Ich dachte wenn ich alle Zeilen mit derselben ID und demselben Timestamp jeweils in einer Matrix habe, dass das Plotten und gegenseitige Korrelieren übersichtlicher und evtl auch performanter wird, anstatt ich für jede Korrelation bzw Plot die gesamte Matrix durchforsten muss. Daher die Zerlegung in Teilmatrizen.

Sollte jemand eine bessere Idee haben bin ich dafür offen.

Grüße Cappaja
Private Nachricht senden Benutzer-Profile anzeigen
 
Cappaja
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 11.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2011, 14:06     Titel:
  Antworten mit Zitat      
Da niemand mehr ein besseren Vorschlag zu haben scheint, belasse ich jetzt mal dabei.
Ich stelle meine derzeitige Lösung dennoch mal zur Verfügung:

Code:

n = size(refStations_sorted);
sat5 = zeros(1,4);
for i = 1:n(1)
    if(refStations_sorted(i,1) == 5)
        sat5(i,:) = refStations_sorted(i,:);
    end
end
 


Hierbei wird eine ID (5) im großen Array gesucht und in ein extra Array abgespeichert. Das Beispiel ist nur für eine ID, eine for-schleife darüber mit fortlaufender Arrayzahl (sat1, sat2, ..., sat32) und man erhält 32 Arrays, eins für jede ID.

Grüße Cappaja
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.03.2011, 22:35     Titel:
  Antworten mit Zitat      
Hallo Cappaja,

Die Schleife kann man sich sparen:
Code:
index = refStations_sorted(:, 1) == 5;
sat5(index, :) = refStations_sorted(index, :);

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Cappaja
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 11.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2011, 20:30     Titel:
  Antworten mit Zitat      
Danke für den Hinweis.
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.