Для сравнения: я реализую алгоритм KMeans, используя набор данных netflix в C #.
Набор данных имеет такую форму:
8: // This is the movie id
23414, 3, 16/5/2009 //User id, rate, date
Я храню данные как разреженные точки в следующих структурах данных:
struct Point {
double Norm {get; set;} // Vector norm
ConcurrentDictionary<ushort, double> Values; // {movie:rate, ...}
void CalculateNorm() { ... }
}
public class KMeans {
...
Point[] _dataset = new Point[470758];
...
}
Проблема в том, что после загрузки набора данных занимает 4 ГБ в ОЗУ, я запускаю сборщик мусора вручную, и это уменьшает использование памяти до половины (2 ГБ), но я ищу более оптимальное использование оперативной памяти, так как я решил это в C ++, и набор данных был только 500 МБ в ОЗУ.
Может кто-нибудь дать мне совет по этому поводу? Я оставил ссылку на репо, если вы хотите увидеть полный код:
https://github.com/joalcava/Kmeans-CS/blob/master/Kmeans/KMeans.cs