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

Excel Daten importieren ab einem bestimmten Wert?

 

Zoe401
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 09:49     Titel: Excel Daten importieren ab einem bestimmten Wert?
  Antworten mit Zitat      
Hallo,

ich möchte in Matlab Daten importieren und das automatisieren, ist ja nicht so schwer! Einfach importieren und dann über "generate function" den Code generieren.
Wie mache ich es aber, wenn ich sage will "Ab da importieren wo diese eine Spalte zum ersten mal den Wert 1 überschreitet!" ???
Hat da jemand eine Idee?

Liebe Grüße,
Zoe
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 10:51     Titel:
  Antworten mit Zitat      
warum willst du das machen? sind deine daten so riesig das sie deinen ram sprengen und du die daten nicht einfach nach dem einlesen bearbeiten kannst?. wenn du ab einem bestimmten wert irgendwas einlesen willst muss ja trotzdem erst dieser wert gefunden werden. dazu muss ja auch alles bis zu disem wert einmal eingelesen werden. die festplatten aktivität sollte also ähnlich groß sein. performanter wird das dadruch nicht denke ich. viel einfacher ist es meist einfach alles einzulesen und dann die eingelesenen daten nach deinen kritärien zu bearbeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 10:55     Titel:
  Antworten mit Zitat      
ok und wie kann ich die bearbeiten und sagen alle alle variablen (51202x1) ab der spalte beginnen wo eine spalte den wert 1 zum ersten mal überschreitet?
Also wenn die bestimmte spalte in zeile 56 das erste mal den wert 1 übersteigt, das die anderen variablen auch alle werte davor rauskicken und auch erst ab der zeile 56 beginnen?
(blöd beschrieben, aber ich weiss nich wie ich es sonst beschrieben soll sorry)
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 11:07     Titel:
  Antworten mit Zitat      
welche anderen variablen? warum speicherst du alles in unterschiedlichen variablen und nicht in einem array/cell/struct? letzteres kann man leicht mit einer schleife durchlaufen. wenn du 1000 variablen namen hast ist das ungünstig. diese lassen sich nur schwer dynamisch verarbeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 11:47     Titel:
  Antworten mit Zitat      
Blöd erklärt sorry.

Ich habe B1...B20 diese Variablen enthalten eine 51200x1 Matrix, also eine Spalte mit ewig vielen Werten. Dann habe ich noch eine Spalte T der in einer Zeile x irgendwann den Wert 1 zum ersten mal überschreitet, und ab dieser Zeile sind auch alle anderen Variablen B1...B20 erst gültig, also müsste ich alle Zeilen darüber rausschmeissen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 12:33     Titel:
  Antworten mit Zitat      
und warum hast du keine matrix B der größe 51200x20 ?
das wäre doch viel einfacher damit kann man viel einfacher arbeiten als einen index im namen zu verstecken.
die lösung wäre dann einfach
Code:
B(1:find(T>1,1)-1,:)=[];

oder jedenfalls so in der art.
wenn du jetzt aber 20 eizelne vektoren hast musst du das ja bei jedem vektor so machen .
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 12:48     Titel:
  Antworten mit Zitat      
Das hört sich gar nicht so schlecht an, aber ganz verstehte ich diesen Code nicht, kannst du mir erklären was jede Zahl bedeutet?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.10.2015, 12:50     Titel:
  Antworten mit Zitat      
Zitat:
aber ganz verstehte ich diesen Code nicht

das heist du verstehst ihn teilweise. welche bedeutung welcher zahl ist dir denn nicht klar?
brobier es doch an einem kleinen beispiel aus und spiel mit den zahlen rum. Smile
Code:
B=magic(10);
B2=B;
T=linspace(0,4,10);
B2(1:find(T>1,1)-1,:)=[];

hier kannst du ja ein wenig an den zahlen spielen und gucken was passiert.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 12:58     Titel:
  Antworten mit Zitat      
B(1:find(T>1,1)-1,: )=[];


Also geklappt hat es! Smile
Super vielen Dank!

Zuletzt bearbeitet von Zoe401 am 09.10.2015, 13:08, insgesamt einmal bearbeitet
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: 09.10.2015, 13:04     Titel:
  Antworten mit Zitat      
Hallo Zoe401,

Welches Detail verstehst Du nicht? Die Indizierung der Variablen B mit runden Klammern? Das Erstellen eines Logical Index mit dem ">" Operator? Den find Befehl mit dem in der Dokumentation beschriebenen 2. Input Argument?

Du kannst es einfach mal ausprobieren:
Code:
1:find(T>1, 1) - 1;
find(T>1) - 1;
find(T>1, 1);


Und, wird es klarer?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 09.10.2015, 13:09     Titel:
  Antworten mit Zitat      
heisst also die ",1" hinter "T>1" das es die erste die größer als eins ist nimmt?
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: 09.10.2015, 13:14     Titel:
  Antworten mit Zitat      
Hallo Zoe401,

Bitte lese die Dokumentation von find . Du kannst direkt hier im Forum auf den Befehl klicken und kommst so sofort zu einer umfassenden Erklärung, was die Parameter bedeuten. Wildes Raten ist dagegen nicht effizient.

Die 1 heißt, dass find nur einen, nämlich den kleinsten passenden Index zurück gibt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 16.10.2015, 08:48     Titel:
  Antworten mit Zitat      
Wenn ich diesen Code eintippe geht das nur für Matrizen, gibt es eine Möglichkeit sowas auch zu schreiben für Cells oder tables?
Hab in den Foren nichts gefunden...

Code:
n01(1:find(n01(:,17)>1,1)-1,:)=[];

Undefined operator '>' for input arguments of type 'table'.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoe401
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 88
Anmeldedatum: 07.10.15
Wohnort: Bei Stuttgart
Version: R2015a
     Beitrag Verfasst am: 16.10.2015, 08:55     Titel:
  Antworten mit Zitat      
Ok habs selber gelöst sorry:
Code:
n01(1:find(n01{:,17}>1,1)-1,:)=[];


Lösung: curly braces!

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
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.