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

Matrix einlesen und leere zeilen löschen

 

KEH
Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 30.01.2015, 08:22     Titel: Matrix einlesen und leere zeilen löschen
  Antworten mit Zitat      
Hallo
Kann mir jemand auf die schnelle eine Routine sagen die eine Matrix (txt; Trennung: tab; Dezimalz.: Komma) ein liest und alle leeren zeilen löscht ?
Die leeren zeilen sind ausschließlich am anfang der Matrix
die werte sind positiv und negativ und die Startzeile dieser Werte ist in jeder Matrix anders.
Ich habe zurzeit das Tool genommen welches mir leere zellen löscht
Problem VIEL zu langsam nach 10min ist er erst in der 3 spalte von 18.

Wäre schön wenn mir jemand Helfen könnte da ich etwas unter zeit not stehe.

Gruß und habt Dank
KEH
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 30.01.2015, 13:46     Titel:
  Antworten mit Zitat      
Hallo KEH,

Hier dürftest du eine passende Funktion finden.

Grüße,
Seban
_________________

Richtig fragen
Debugging
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: 30.01.2015, 13:47     Titel: Re: Matrix einlesen und leere zeilen löschen
  Antworten mit Zitat      
Hallo KEH,

Eine Matrix ist immer rechteckig. Wieso können dann "leere Zeilen" drin stehen? Und TABs kommen in Matrizen nicht vor.
Ich nehme an, Du meinst ein Text-File im TAB-separiertem Format. Was geschieht, wenn Du das mit CSVREAD einliest?
Das Komma musst Du zunächst gegen einen Punkt austauschen (Suche einfach im Forum oder im Internet danach, das Thema wurde bereits oft besprochen).

Zitat:
Ich habe zurzeit das Tool genommen welches mir leere zellen löscht Problem VIEL zu langsam nach 10min ist er erst in der 3 spalte von 18.

Wir können nicht wissen, welches Tool Du hier genommen hast. Es ist kaum vorstellbar, dass irgendein Programm 10 Minuten braucht um 18 Files zu bearbeiten. Da bin ich ja von Hand mit einem Editor schneller!

Bitte versuche Deine Frage nochmal klar und eindeutig zu stellen. Je mehr die Leser raten müssen, desto wahrscheinlicher ist es, dass eine Antwort mehr Verwirrung stiftet als hilft.

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

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 30.01.2015, 14:10     Titel:
  Antworten mit Zitat      
mhh ich fand sie Klar Formoliert *lach*

Ja natürlich das TXT ist in den Oberen Zeilen leer
Das Tool mein ich das Import Tool und das macht ja forgendes
Code:
for col=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
    % Converts strings in the input cell array to numbers. Replaced non-numeric
    % strings with NaN.
    rawData = dataArray{col};
    for row=1:size(rawData, 1);
        % Create a regular expression to detect and remove non-numeric prefixes and
        % suffixes.
        regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';
        try
            result = regexp(rawData{row}, regexstr, 'names');
            numbers = result.numbers;
           
            % Detected commas in non-thousand locations.
            invalidThousandsSeparator = false;
            if any(numbers==',');
                thousandsRegExp = '^\d+?(\,\d{3})*\.{0,1}\d*$';
                if isempty(regexp(thousandsRegExp, ',', 'once'));
                    numbers = NaN;
                    invalidThousandsSeparator = true;
                end
            end
            % Convert numeric strings to numbers.
            if ~invalidThousandsSeparator;
                numbers = textscan(strrep(numbers, ',', ''), '%f');
                numericData(row, col) = numbers{1};
                raw{row, col} = numbers{1};
            end
        catch me
        end
    end
end


und nach einigen min sagt er mir das ich ihn bei der 3 spalte und 760 zeile gestoppt habe

das mit dem csv versuch ich mal!! Ich habs erst mal anders umgesetzt. aber das problem besteht noch

edit: ich vergas zusagen das er in der zeile
Code:

hängen bleibt bzw. lange braucht
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 06.02.2015, 09:24     Titel: Noch mal hoch geholt mit txt beispiel
  Antworten mit Zitat      
Hallo Gemeinde

Seban's Hinweis zur Hilfeseite war ganz gut leider half er mir nicht weiter.

Im Anhang eine Test Datei die es zu verarbeiten gilt.
Mit Kopfzeile, n-Leerzeilen und Einer Matrix
Die spalten der Matrix sind konstant die Zeilen nicht.
Die Leerzeilen sind ebenfalls variabel

Jemand eine Idee wie ich das Umsetze?

PS03_G_T11_P04.txt
 Beschreibung:
TXT Beispiel Start der Matrix ist Variabel

Download
 Dateiname:  PS03_G_T11_P04.txt
 Dateigröße:  1.27 MB
 Heruntergeladen:  341 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 06.02.2015, 10:38     Titel:
  Antworten mit Zitat      
Hallo KEH,
bspw. mit readtable:
Code:
% Datei einlesen
T = readtable('PS03_G_T11_P04.txt', 'Delimiter', '\t');
A = table2array(T);

% Leerzeilen finden ...
[z, s] = size(A);
hlp = NaN(1, s);
log = false(z, 1);  % pre-allocate
for ii = 1:z
    log(ii) = isequaln(A(ii,:), hlp);
end
idx = find(log);
% ... und entfernen
A(idx,:) = [];

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 06.02.2015, 10:57     Titel:
  Antworten mit Zitat      
Mh sehr gut
ich quäl mich 2h und du schüttelst das in 5 min hin =D
Naja wie auch immer ich habs getestet und folgendes erscheint

Code:
EDU>> Table_Test
Warning: Variable names were modified to make them valid MATLAB
identifiers.
> In makeValidName at 25
  In @table\private\setVarNames at 48
  In table.readTextFile at 278
  In table.readFromFile at 33
  In readtable at 118
  In Table_Test at 2


bei dem code
Code:
% Datei einlesen
T = readtable('PS03_G_T11_P04', 'Delimiter', '\t');
A = table2array(T);

% Leerzeilen finden ...
[z, s] = size(A);
hlp = NaN(1, s);
log = false(z, 1);  % pre-allocate
for ii = 1:z
    log(ii) = isequaln(A(ii,:), hlp);
end
idx = find(log);
% ... und entfernen
A(idx,:) = [];


mein A ist 6046x18 Double
wie bekomm ich da jetzt zahlen ... oh man ich fühl mich als ob ich das erste mal was mache
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 06.02.2015, 11:04     Titel:
  Antworten mit Zitat      
KEH hat Folgendes geschrieben:
[code]EDU>> Table_Test
Warning: Variable names were modified to make them valid MATLAB
identifiers.

Die Bezeichnungen in Zeile 1 der Textdatei sind keine gültigen Bezeichner, daher passt Matlab diese an. (Werden in T verwendet)

Zitat:
mein A ist 6046x18 Double wie bekomm ich da jetzt zahlen

A enthält 6046x18 Zahlen, was willst du mehr?
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 06.02.2015, 11:07     Titel:
  Antworten mit Zitat      
Ja Genau Alles Perfekt

Danke für die Erklärung des Fehlers

Jetzt würde ich gern in die Zahlen die darin stehen weiter verarbeiten.
also ich benötige nur noch den auf ruf der matrix
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 06.02.2015, 11:18     Titel:
  Antworten mit Zitat      
Spalte n der Matrix: A(:,n)

http://de.mathworks.com/help/matlab.....atlab/array-indexing.html
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
KEH
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 09.10.14
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 06.02.2015, 11:21     Titel:
  Antworten mit Zitat      
tut mir leid Embarassed

ich hab versucht die ganze matrix zusehn das war nicht möglich
jetzt mit plot einer spalte ist alles super.

Vielen dank dir Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 06.02.2015, 11:26     Titel:
  Antworten mit Zitat      
Kein Ding, gern geschehen Smile
_________________

Richtig fragen
Debugging
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.