Was sind die workaround-Optionen für python-out of memory-Fehler?

Ich lese eine x -, y -, z-point-Datei (LAS) in python und in-memory-Fehler. Ich bin Interpolation unbekannter Punkte zwischen bekannten Punkte, die für ein Projekt an dem ich arbeite. Ich begann die Arbeit mit kleinen Dateien (< 5,000,000 Punkte) und war in der Lage zu Lesen/schreiben in ein numpy-array und python Listen mit kein problem. Ich erhalten haben, mehr Daten zu arbeiten (> von 50.000.000 Punkte) und jetzt ist mein code nicht mit einem MemoryError.

Was sind einige Optionen für den Umgang mit derart großen Datenmengen? Ich nicht haben, laden Sie alle Daten gleichzeitig in den Speicher, aber ich muss einen Blick auf die benachbarten Punkte mit scipy kd-Baum ich verwende Python 2.7 32-bit-auf eine 64-bit-Windows-XP-Betriebssystem.

Vielen Dank im Voraus.

EDIT: Code ist unten geschrieben. Ich habe code für lange Berechnungen und Definitionen der Variablen.

from liblas import file
import numpy as np

f = file.File(las_file, mode='r')
num_points = int(f.__len__())
dt = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('i', 'u2'), ('c', 'u1'), ('t', 'datetime64[us]')]
xyzict = np.empty(shape=(num_points,), dtype = dt)
counter = 0
for p in f:
    newrow = (p.x, p.y, p.z, p.intensity, p.classification, p.time)
    xyzict[counter] = newrow    
    counter += 1

dropoutList = []
counter = 0
for i in np.nditer(xyzict):
    # code to define P1x, P1y, P1z, P1t
    if counter != 0:
        # code to calculate n, tDiff, and seconds 
        if n > 1 and n < scanN:
            # code to find v and vD
            for d in range(1, int(n-1)):
                # Code to interpolate x, y, z for points between P0 and P1
                # Append tuple of x, y, and z to dropoutList
                dropoutList.append(vD)
    # code to set x, y, z, t for next iteration
    counter += 1
Kann man den code, Angabe der Fehler? (Oder ein kleines snippet, das das problem reproduziert werden?) Es kann ein Weg, um effektiver zu machen, aber es ist unmöglich zu sagen ohne den code.
Verwenden Sie np.loadtxt oder np.genfromtxt? Wenn ja, sind Sie Recht ineffizient für große Dateien. (Nicht zu stecken, meine Antwort, aber es ist relevant: stackoverflow.com/a/8964779/325565 ) können Sie entweder Rollen Sie Ihre eigenen reader und verwenden Sie fromiter oder, in diesen Tagen, verwenden Sie einfach pandas. (Pandas passiert zu haben, ein sehr effizientes whitespace-getrennte ascii-reader.)

InformationsquelleAutor Barbarossa | 2013-11-13

Schreibe einen Kommentar