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

Vorfiltern von Daten vor Import

 

dasdassad
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2019, 13:07     Titel: Vorfiltern von Daten vor Import
  Antworten mit Zitat      
Hallo zusammen,

leider habe ich kein passendes Thema im Forum gefunden, sodass ich direct nach Eurer Hilfe frage.

Ich möchte mir Daten aus einer Excel in eine Matrix übergeben lassen. Leider sind die Dateien mit 70000+ Datenpunkten sehr groß, sodass die normale Datenübergabe an Ihre Grenzen stösst.

Ich habe bisher in SCILAB über readxls() und über die entsprechende Spaltenzuordnung die Daten je Spalte einzeln importiert und dann in eine Matrix zusammengeführt.

Hier habe ich zwei Themen, die wahrscheinlich deutlich sinnvoller anders umgesetzt warden können.

- Besteht die Möglichkeit, vorab in einer definierten Spalte nach einen Wert zu suchen und alle Zeilen mit diesem Wert in eine Matrix zu übergeben?Wenn ja, wie könnte man dies umsetzen?

- aktuell ziehe ich über den Befehl GetMonitoringValues = s1(2:65000,5) alle Werte aus der Spalte 5. Ich bin mir nicht ganz sicher,aber hier ist ein Limit zwischen 65000 und 70000, bevor ein Fehler gemeldet wird. Im Moment schaue ich vorab in die Exce l und definiere den Y-Wert s1(x:Y,Z) händisch in Abhängigkeit der Datei. Gibt es hier eine Möglichkeit, importiere bis "leere Zelle", umzusetzen?


Besten Dank vorab
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Leider sind die Dateien mit 70000+ Datenpunkten sehr groß, sodass die normale Datenübergabe an Ihre Grenzen stösst.

Je nach Anzahl und Art der Spalten sollte das eigentlich noch kein Problem sein. 20 Spalten mit Doubles wären beispielsweise "nur" 11 MB und sollten locker in den Speicher passen.

Zitat:
Besteht die Möglichkeit, vorab in einer definierten Spalte nach einen Wert zu suchen und alle Zeilen mit diesem Wert in eine Matrix zu übergeben? Wenn ja, wie könnte man dies umsetzen?

Ja, allerdings müssten zunächst alle Daten eingelesen werden. Dann geht z.B.
Code:
M( M(:,col) == wert, :)


Zitat:
bevor ein Fehler gemeldet wird.

Welcher Fehler? Bitte poste zusammenhängenden Code. Das macht alles deutlich nachvollziehbarer.

Zitat:
Gibt es hier eine Möglichkeit, importiere bis "leere Zelle", umzusetzen?

Leere Zelle in einer Spalte oder nur noch leere Zellen in allen Spalten? Letzteres wäre die UsedRange, die man über ActiveX auslesen kann. Ist aber mühsam, andere Möglichkeiten wären also zu bevorzugen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
dasdassad
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2019, 14:03     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Rückmeldung

Meine Funktion sieht bisher folgend aus:
Code:

function GetMonitoringValues = GetValues()
    //get the excel data from the following dir
    dSheets = readxls('Job1.xls')
    //get the first sheet of the file
    s1=dSheets(1)
    // extract the integer values starting with 2nd row first column from Schicht
    a = 2;
    b =65000;
    GetMonitoringValues = s1(a:b,5)//data points for PARTID-column 5 and max possible values 65000

endfunction

PARTID = GetValues()
disp(PARTID)

 


Zitat:

Leider sind die Dateien mit 70000+ Datenpunkten sehr groß, sodass die normale Datenübergabe an Ihre Grenzen stösst.


Da hast Du recht. Es kommt immer eine FEhlermeldung, wenn in meiner Formel die Variable b größer als die Werte in der Excel sind.


Zitat:
Besteht die Möglichkeit, vorab in einer definierten Spalte nach einen Wert zu suchen und alle Zeilen mit diesem Wert in eine Matrix zu übergeben? Wenn ja, wie könnte man dies umsetzen?


Das probiere ich einmal aus.


Zitat:
bevor ein Fehler gemeldet wird.

siehe erster Punkt


Zitat:
Gibt es hier eine Möglichkeit, importiere bis "leere Zelle", umzusetzen?


In nur einer Spalte. Ich habe ein Bild angehangen, hier alle Spalten bis P_PARTID ist leer.



Ich habe noch eine andere Frage Richtung Vereinfachung. Ich rufe aktuell die obige Funktion mehrmals auf, um alle Spalten zu übergeben und dann in einer Matrix zusammenzuführen.

Gibt es eine Möglichkeit etwas ähnliches wie s1(a:b,1,2) für beigefügtes Beispiel, das man P_PARTID und PS-MEAN usw. direct in einer Funktion übergeben kann.


Besten Dank vorab

P.S.: Blöde Frage: wie funktioniert das mit der Zitat-Hervorhebung?

Daten.JPG
 Beschreibung:

Download
 Dateiname:  Daten.JPG
 Dateigröße:  34.85 KB
 Heruntergeladen:  314 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Funktion ist kein MATLAB-Code.

Zitat:
Es kommt immer eine FEhlermeldung, wenn in meiner Formel die Variable b größer als die Werte in der Excel sind.

Bitte die Meldung kopieren statt übersetzen. end oder min(b, end) statt b sollte helfen.

Zitat:
Gibt es eine Möglichkeit etwas ähnliches wie s1(a:b,1,2) für beigefügtes Beispiel, das man P_PARTID und PS-MEAN usw. direct in einer Funktion übergeben kann.

Bei xlsread in MATLAB kein Problem. Da kannst du einen beliebigen Bereich angeben oder gleich die gesamte Datei einlesen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
dasdassad
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2019, 19:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich musste leider Scilab nehmen, da Geld für die Lizenz fehlt.

Habe aber Deine Tips umgesetzt. End habe ich in % geändert, funktioniert nun ohne Probleme und auch bei >100000.

Besten Dank dafür.

Ich habe aber noch eine andere Frage, bei der ich nicht recht weiterkomme. Ich lasse aktuell alle Werte ausgeben, die eine 1 in der ersten Spalte der Matrix M haben. Ich bekomme hier auch alle Werte, jedoch nur die Position in der Matrix. Ich würde aber gerne die gesamte Zeile anzeigen lassen, damit ich dann diese Werte in eine andere Matrix abspeichern kann.

Ich habe meinen bisherigen Code beigefügt. Bin für Hilfe dankbar.[/code]

Code:

a = [1]
[p]= find(a(1,:) == M);

disp(p)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

genau das habe ich doch beschrieben:
Code:
M( M(:,col) == wert, :)

in dem Fall also
Code:
M( M(:,1) == 1, :)


So funktioniert es in MATLAB. Ob es in SciLab auch so funktioniert, weiß ich nicht. Es gibt hier ein Unterforum für SciLab, dort wären Fragen dazu am besten aufgehoben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 11.07.2019, 12:51 Uhr von Jan S
Von "Suche Funktion für ..." nach Scilab / Xcos (ehemals Scicos) Forum
 
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.