std::bad_alloc

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beim Einführen einer Aufwendigen Interpolation mit dem Scipy-Sandbox-Modul delaunay bekomme ich folgende Fehlermeldung:

terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc

Ich kann damit nichts anfangen. Das einzige was ich herausgefunden habe ist, dass man das evtl. durch eine Veränderung von diversenSystemeinstellungen vermeiden kann.

Für Hilfe wäre ich sehr dankbar.

Grüße Tromai
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Hat wirklich niemand eine Ahnung, was man da machen könnte?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Hatte das Problem noch nie. Aber mehr Infos wäre gut. Welches Betriebssystem, welcher Prozessor.
TUFKAB – the user formerly known as blackbird
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Ich würde ja erstmal auf einen Out-of-Memory-Fehler tippen.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Hier mal ein kleines Beispielskript:

Code: Alles auswählen

from numpy import *
from scipy import *
from numpy.random import *
from scipy.sandbox.delaunay import *

index_y= [] 
index_x = [] 
value = []
for i in range(200):
   index_y.append(randint(10,2500))
   index_x.append(randint(10,2500))
   value.append(randint(-10,10)) 
 
nwyx = indices((2600, 2548))
tri = Triangulation(index_y, index_x)
interp = tri.nn_interpolator(value)
nwwert = interp(nwyx[0], nwyx[1])
print nwwert

Wenn ich die Funktion folgendermaßen in 4 Submatrizen aufsplitte, dann tritt der Fehler immer bei der gleichen Sub-Matrix auf. Egal in welcher Reihenfolge ich sie aufrufe.

Code: Alles auswählen

nwwert = zeros((2600, 2548))
nwwert[0:1300, 0:1300] = interp(nwyx[0][0:1300, 0:1300], nwyx[1][0:1300, 0:1300])) 
nwwert[0:1300, 1300:2548] = interp(nwyx[0][0:1300, 1300:2548], nwyx[1][0:1300, 1300:2548]))
nwwert[1300:2600, 0:1300] = interp(nwyx[0][1300:2600, 0:1300], nwyx[1][1300:2600, 0:1300]))
nwwert[1300:2600, 1300:2548] = interp(nwyx[0][1300:2600, 1300:2548], nwyx[1][1300:2600, 1300:2548)) 
Ich habe jetzt mal auf die Speicherauslastung geachtet. Er fährt bei dem Beispielscript auf 86% hoch und steigt dann aus. Bei einem realen Versuch (also mit dem Originalprogramm) bleibt er bei einem Eingangsdatensatz (doppelte Punktmenge) bei 30% und läuft problemlos durch und beim nächsten steigt er dann wieder bei ca 85% aus. Das seltsame dabei ist, dass er bis zu einem bestimmten Punkt konstant bei 30% bleibt und dann plötzlich immer mehr Memory braucht. Das macht sich besonders bei der oben Beschriebenen aufsplittung bemerkbar.

Mein System:
2 x Intel(R) Pentium(R) 4 CPU 3.20GHz
2GB-DDR2-RAM

Ich arbeite mit Debian Testing, Python 2.4.4 und Scipy 0.5.2.
Ich weiß dass es da neuere Versionen gibt, allerdings kann ich die aus Kompatibiliätsgründen nicht nutzen.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Was mir gerade noch auffällt, ist dass im Beispiel-Programm der Fehler nicht immer bei der gleichen Sub-Matrix auftritt. Im Originalprogramm aber schon. Wenn ich die entsprechenden SubMatirzen, dann auskommentiere läuft es ohne Probleme durch.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

ich glaube nicht, daß Dir jemand von uns kompetente Hilfe geben kann (lasse mich aber gerne eines Besseren belehren). Am besten ist es auf der Scipy Mailingliste inkl. all der Info, die Du gerade hier gegebenen hast nachzufragen. Dort lesen die Entwickler mit und können ggf. auch sagen, ob ihnen ein Fehler unterlaufen ist oder Dir.

Bzgl. der Version: (angeben auf jeden Fall, so wie im vorletzten Post) Die scipy-Version ist ja aktuell und Python 2.4 ist ja nicht sooo tierisch veraltet. Ich glaube nicht, daß Du Dich dafür entschuldigen mußt. ;-)

Im Übrigen kann ich (Python 2.5.1, scipy 0.5.2, numpy 1.0.1, Ubuntu 7.04, Intel 2x3.0 GHz, 2 Gb RAM - definitiv nicht ausgelastet) das Problem reproduzieren. (Kannst Du in einem Post auf der Mailingliste auch gerne angeben.)

Gruß,
Christian
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Ok, danke für die Auskunft. Dass das Problem auf anderen Rechnern reproduzierbar ist beruhigt mich irgendwie. In die Mailinglist habe ich schon gepostet. Sobald es eine verwertbare Antwort gibt bzw. sobald das Problem gelöst ist melde ich mich.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ich kann auf scipy-user keinen entsprechenden Thread finden. Wo läuft der Thread?

Christian
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Nach einem Gespräch mit einem Programmierer, der in den MLs sehr aktiv ist hab in der dev-Mailing-List gepostet da er meinte, dass es dort besser aufgehoben ist,da es sich wahrscheinlich um einen Bug handelt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ah, ok, habe ich übersehen - die Liste lese ich selten. Immerhin scheint man dran zu sein. Noch ein Tipp: Hier wie dort gilt: Wenn Du nicht alle Info gibst, gibt es umgekehrt erst einmal einen Haufen Fragen. Das verlängert nicht nur die Zeit, bis man Antwort bekommt - im schlimmsten Fall wird man auch nicht ernst genommen und die Leute, wenn es länger dauert nicht mehr mit.

Gruß,
Christian
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Ich hatte den Thread ganz vergessen.
In der Mailinglist wurde nach einiger Zeit der Link zu einem Patch gepostet, den es allerdings schon eine ganze Weile gibt.
http://projects.scipy.org/scipy/scipy/ticket/382
Zudem soll es etwas bringen, die Werte auf ein paar Nachkommastellen zu runden.
Der Patch hat es bei meinem Problem allerdings sogar schon getan. Bisher läuft mein Programm stabil.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Ok, da habe ich mich wohl zu früh gefreut.
Bei einer Zeitreihe über mehrere Interpolationszeitpunkte ist er wieder mit dem gleichen Fehler ausgestiegen.
Antworten