Кажется, у меня закончилось 32-разрядное адресное пространство. Какие у меня варианты?

Я пытаюсь взять ковариацию большой матрицы, используя numpy.cov. Я получаю следующую ошибку:

Python(22498,0xa02e3720) malloc: *** mmap(size=1340379136) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug

Process Python bus error

Похоже, что это не редкость для 32-разрядных машин/сборок (у меня 64-разрядный mac os x 10.5, но с использованием 32-разрядной сборки python и numpy, поскольку мне не удалось создать numpy + scipy + matplotlib на 64-разрядная установка).

Итак, на данный момент, какой будет рекомендуемый курс действий, который позволит мне приступить к анализу, если не переключить машины (в настоящее время мне не доступны другие)? Экспорт в fortran/C? Существует ли простое (r) решение? Спасибо за ваши предложения.

Ответ 1

Чтобы быть на вашем месте, я бы попытался "рассорить" (сохранить) матрицу на моем жестком диске, закрыть python, а затем в командной строке повторно открыть файл с выделенным файлом и выполнить мои вычисления на экземпляре "fresh python".

Я бы сделал это, потому что, возможно, ваша проблема перед вычислением ковариации.

import cPickle
import numpy
M = numpy.array([[1,2],[3,4]]) # here it will be your matrix
cPickle( M , open( "~/M.pic", "w") ) # here it where you pickle the file

Здесь вы закрываете python. Ваш файл должен быть сохранен в вашем домашнем каталоге как "M.pic".

import cPickle
import numpy
M = cPickle.load( open( "~/M.pic", "r") )
M = numpy.coa( M )

Если он все еще не работает, попробуйте установить "хороший" тип данных для ваших данных. numpy seams для использования dtype 'float64' из 'int64' по умолчанию. Это огромно, и если вам не нужна эта точность, вы можете уменьшить ее до "int32" или "float32".

import numpy
M = numpy.array([[1,2],[3,4]] , dtype.float32 )

В самом деле, я могу гарантировать, что C/Fortran не является для вас вариантом. Numpy уже написана на C/Fortran и, вероятно, людьми умнее, чем вы и я;)

Любопытством, насколько велика ваша матрица? насколько велик ваш маринованный файл?