умножение матриц python: как обрабатывать очень большие матрицы?

a = numpy.zeros((17770,5))

b = numpy.zeros((5,20000))

ma = numpy.matrix(a)

mb = numpy.matrix(b)

То есть ma.shape = (17770,5), mb.shape = (5,20000), оба numpy.matrix.

Мне нужно ma*mb. Но я получаю сообщение об ошибке "ValueError: array is too big".

Являются ли эти матрицы слишком большими для умножения Python?

Кстати, я тестировал с python2.6.6/32bit/3GB RAM.


person zhongqi    schedule 19.08.2011    source источник
comment
Подумайте о отображении памяти, если вам действительно нужна такая большая матрица продукта.   -  person Iterator    schedule 26.09.2011


Ответы (1)


Я могу вычислить ma*mb на своей машине (Python 2.7.1 |EPD 7.0-2 (64-bit) на 64-битной Ubuntu).

Убедитесь, что вы используете 64-разрядный Python в 64-разрядной ОС, поскольку матрица с плавающей запятой двойной точности размером 17770x20000 требует 2,8 ГБ ОЗУ, что превышает (или очень близко) то, что может обработать большинство 32-разрядных платформ.

В зависимости от ваших требований также может быть возможно использование чисел с плавающей запятой одинарной точности (numpy.float32).

Наконец, если ваши матрицы разрежены или имеют структуру, вы можете изучить возможность использования этого для снижения требований к памяти.

person NPE    schedule 19.08.2011
comment
Вы имеете в виду, что у меня закончилась память? - person zhongqi; 19.08.2011