Если вы храните двойники, которые 8 байт, 20Kx20K означает * 20000 8 * 20000/1024/1024 ~ 3 Гб оперативной памяти, чтобы держать все это в памяти.
Я не знаю, сколько оперативной памяти у вас есть в наличии, но я хотел бы посмотреть на то, что R может сделать, чтобы сериализовать матрицу на диск по мере необходимости.
Является ли матрица разреженным или ленточным? может вы делаете что-то, чтобы уменьшить объем необходимой вам памяти?
Насколько велика нулевое пространство для вашей матрицы? Какое число условий (отношение наибольшего к наименьшему собственному значению)? Большое количество состояний может свидетельствовать о трудностях в решении. Матрица не должна иметь нулевую строку или столбец, чтобы быть почти единственной.
UPDATE:
Основываясь на ваш комментарий, я бы сказал, что RAM является наименее ваших проблем. Похоже, что можно сохранить всю матрицу в памяти - если вы можете решить все это. Вы можете адресовать всю матрицу. Вы работаете на 64-битной ОС - тоже ваша версия R 64-bit?
К сожалению, одним из побочных продуктов SVD является получение размера нулевого пространства.
Вы можете получить минимальное собственное значение для своей матрицы с помощью итерации Jacobi. Lanczos может быть хорошим выбором для получения максимального собственного значения. Будет очень много работы, чтобы получить все из них; вы можете просто хотеть оценить пять самых маленьких и самых больших.
В любое время, когда я испытываю ошибку с помощью некоторого программного обеспечения, я сразу же вставляю его в поиск Google. По крайней мере, это приятно знать, что я не первый опыт конкретную проблему:
http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=Error+in+svd(m)+:+infinite+or+missing+values+in+ «х»
Как узнать, какое значение NA в моих данных? И у меня 10 ГБ ОЗУ. Я использовал ваш код> который (есть. end (m)) named integer (0) , чтобы проверить, есть ли какое-либо конечное значение, и он дал мне имя integer (0) – Tweet
, которое() идентифицирует элементы, которые являются истинными. Поэтому мой код скажет вам, какие элементы вызывают проблема. Важно - обратите внимание на восклицательный знак отрицания.! is.finite() – Andrie
это не решило проблему. Я использовал вашу функцию, и она ничего мне не говорит. :(любая помощь? – Tweet