2012-01-19 1 views
3

Я использовал cern.colt.matrix * Lib для вычисления разреженных матриц ..но кажется, что я продолжать работать в эту ошибку:.«матрица слишком большой» исключение с помощью жеребенка Java LIB

Исключение в потоке «основного "java.lang.IllegalArgumentException: матрица слишком большой

Я думаю, что это происходит потому, что конструктор бросает исключение, когда Nrows * Ncols> INTEGER.max

апи: http://acs.lbl.gov/software/colt/api/cern/colt/matrix/impl/SparseDoubleMatrix2D.html исключение: IllegalArgumentException - если строки < 0 || столбцы < 0 || (двойные) столбцы * rows> Integer.MAX_VALUE.

Мои ряды: 5787 и перевалы являются 418032.

Это работало хорошо в MATLAB (матрица нагрузок просто отлично, и все операции работают). Я хотел знать, как я могу решить эту проблему? Должен ли я использовать diff с разреженной матрицей lib или мне нужно срезать мои матрицы или хранить матрицу в виде вектор-строки SparseDoubleMatrix1D

Спасибо.

ответ

2

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

В зависимости от того, насколько разрежена матрица, вам понадобится только 19 ГБ для этой матрицы.

+0

Спасибо. Но память не является для меня ограничением (у вас есть 30 + g на мощном сервере). Та же логика отлично подходит для кода matlab, например: X = sparseread ("smatrix.txt") [D, W] = размер (X) Что меня волнует, почему это должно быть ошибкой на столбцах * rows> Integer.MAX_VALUE. (это означает отсутствие элементов <2^31-1!) Не должно быть что-то вроде строк <2^31 и cols <2^31 на 32-битной машине. – deepak

+0

Максимальный размер для одного массива - Integer.MAX_VALUE (наибольшая подписанная 32-битная величина int). Это 2^31-1 –

Смежные вопросы