Проблемы с памятью с функцией as.dist в R / rpy2

StackOverflow https://stackoverflow.com/questions/5354840

  •  27-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь выполнить иерархическую кластеризацию с использованием настраиваемой меры расстояния. Я выполняю все вычисления на Python, а затем передаю структуры данных в R для кластеризации

родовое слово

Таким образом, мои меры расстояния хранятся в списке Python, преобразованном в матрицу R, которая затем преобразуется в объект dist, необходимый для кластеризации. В определенной степени это работает. Однако, когда матрица становится слишком большой, я получаю эту ошибку:

родовое слово

Это происходит в тот момент, когда я конвертирую в объект dist (as.dist). Я не проверял, при каком размере он разваливается, но он работает с матрицей 3000x3000, но не работает с матрицей 6500x6500, так что где-то посередине. Я использую функцию del в Python, чтобы попытаться удалить все ненужные объекты из памяти, но из того, что я прочитал, это не гарантирует, что память станет немедленно доступной для использования.

Итак, в конечном итоге, есть ли более эффективный с точки зрения памяти способ получить объект dist? Или, возможно, есть альтернативный метод, который я мог бы использовать? Я нашел несколько других методов в библиотеке cluster R, которые не используют объект dist, но эти методы используют встроенные метрики расстояния.

Заранее спасибо!

Это было полезно?

Решение

Вызов функции del () Python не гарантирует, что память сразу станет доступной для использования.Вызов сборщика мусора явно помогает.Ответ на другой вопрос здесь ( Очистка памяти, используемой rpy2) указывает на соответствующий раздел документации rpy2.

Что касается алгоритмов кластеризации, то для иерархической кластеризации с hclust () требуется матрица «расстояния» (размером n * (n + 1) / 2; R экономит немного памяти, поскольку матрица симметрична).Существуют и другие алгоритмы кластеризации, или, если вы увлечены трюками иерархической кластеризации, чтобы минимизировать размер начальной матрицы путем создания начальных блоков, но это выходит за рамки вопроса, связанного с программированием.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top