Seite 1 von 1

std::bad_alloc

Verfasst: Dienstag 12. Juni 2007, 13:45
von tromai
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

Verfasst: Montag 18. Juni 2007, 08:15
von tromai
Hat wirklich niemand eine Ahnung, was man da machen könnte?

Verfasst: Montag 18. Juni 2007, 13:57
von mitsuhiko
Hatte das Problem noch nie. Aber mehr Infos wäre gut. Welches Betriebssystem, welcher Prozessor.

Verfasst: Montag 18. Juni 2007, 19:54
von Joghurt
Ich würde ja erstmal auf einen Out-of-Memory-Fehler tippen.

Verfasst: Dienstag 19. Juni 2007, 06:48
von tromai
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.

Verfasst: Dienstag 19. Juni 2007, 07:36
von tromai
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.

Verfasst: Dienstag 19. Juni 2007, 11:52
von CM
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

Verfasst: Dienstag 19. Juni 2007, 14:32
von tromai
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.

Verfasst: Mittwoch 20. Juni 2007, 17:44
von CM
Ich kann auf scipy-user keinen entsprechenden Thread finden. Wo läuft der Thread?

Christian

Verfasst: Donnerstag 21. Juni 2007, 09:48
von tromai
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.

Verfasst: Donnerstag 21. Juni 2007, 13:18
von CM
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

Verfasst: Freitag 17. August 2007, 07:41
von tromai
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.

Verfasst: Freitag 17. August 2007, 08:54
von tromai
Ok, da habe ich mich wohl zu früh gefreut.
Bei einer Zeitreihe über mehrere Interpolationszeitpunkte ist er wieder mit dem gleichen Fehler ausgestiegen.