ich bin neu hier und hab gleich mal eine Frage. Ich habe gerade erst angefangen Python zu skripten und will es primär im wissenschaftlichen Bereich nutzen. Bis jetzt habe ich eigentlich alles in Matlab gemacht und kenn mich da auch sehr gut aus (Die Aufgabe und Datenanalyse ist in Matlab schon gelöst!). Da Python jedoch frei ist, will ich jetzt einfach anfangen es zu lernen.
So nun zu meinem Problem:
Ich möchte Messdaten einlesen und diese Auswerten. Die Messwerte kommen aus LabView (ASCII). Die Messung hat zwei Freiheitsgrade (Temperatur, Strom). Die Dateien sind nach Temperaturen in Unterordner gespeichert. Hier mal die Ordnerstruktur:
Code: Alles auswählen
**************************
basePath
|-- 10Grad
|-- Datei 1 100mA
|-- Datei 2 110mA
|-- ...
|-- 11Grad
|-- Datei 1 100mA
...
***************************
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
import glob
from mpl_toolkits.mplot3d import Axes3D
basePath = '.'
allfolder = []
filename = []
fh = []
for root, dirs, files in os.walk( basePath ):
allfolder.append( dirs )
searchfolder = allfolder[ 0 ]
for folder in searchfolder:
for files in glob.glob( folder + '/*.lvm' ):
filename.append( files )
fh.append( filename )
filename = []
P = []
for n in range( 0, len( fh ) ):
download = fh[ n ]
P.append([])
for k in download:
data = np.genfromtxt( k, skiprows = 22 )
P[n].append( data[ :, 1 ] )
test = np.array(P)
Zum ersten wäre jetzt meine Frage, ob dieser Code vielleicht noch optimierungsfähig ist, da ich später >10.000 Dateien einlesen möchte. In diesem Zusammenhang hätte ich vielleicht auch eine Frage an die allgemeine Leistungsfähigkeit von Python. Die 10.000 Dateien enthalten jeweils 5000 einzelne Messwerte. Das entspricht einem Array mit > 50 Millionen Werten (ca. 1,2 GB). Kann Python das überhaupt schaffen? Selbst in Matlab kommt es dann schon auf die richtige Programmierung an.
Für alle die neben Python auch noch Matlab können, das einlesen der Daten habe ich in Matlab mit folgendem Script gemacht:
Code: Alles auswählen
clear all
% Einlesen der Daten und speichern in einer Matrix und als Vektor
format long % Speicherlänge auf long umstellen
Temp = [ 12 13 14 15 16 17 18 19 20 ]; % Temperaturschritte !!!
for k = 1 : length( Temp );
Folder = [ num2str( Temp( k ) ), 'Grad' ]; % Alle Ordner werden durchsucht und ausgelesen
dateien = dir( fullfile( pwd, Folder , '*.lvm' ) ); % Dateien mit der Endung *.lvm werden eingelesen
for i = 1 : length( dateien )
messwerte{ i } = dlmread( [ fullfile( pwd, Folder , dateien( i ).name ) ], '\t', 22, 0); % Hier werden die Daten in eine Matrix gespeichert
PWR( :, i, k ) = messwerte{ i }( :, 3 );
end
WL = messwerte{ 1 }( :, 2 ); % Spaltenvektor
I = 1:1:550; % Zeilenvektor
end
Ich würde diese Daten später gerne als 3dPlot und Contour-Plot ausgeben. Aber ich hab irgendwie noch Probleme mit der Struktur des Arrays und wie ich die einzelen Ebenen an die contour-Funktion übergebe.
Es würde mich freuen falls mir jemand mit diesem Problem helfen kann. Bei Bedarf kann ich ernst gemeinten Helfen auch gerne ein paar Dateien inkl. Python-Skript zukommen lassen.
Mit freundlichen Grüßen
MrRT