правый.Поэтому я решил, что для вычисления среднего значения любого данного измерения мне потребуется как минимум двойное число.
Проблема заключалась в том, что я подходил к этой задаче следующим образом:
for each sample, get the array it is to update
for each dimension in that array, calculate it's running mean given the new sample
Проблема сто есть, что double [] [] должен был бы содержать текущее среднее значение для каждого измерения каждого элемента для обновления.Поэтому я теперь перестроил свой цикл так, чтобы он выглядел так:
for each array to be updated
for each sample that will update this array
for each dimension in the array to be updated calculate the running mean
. Для этого обхода требуется некоторая предварительная обработка, мне нужно пройтись по всем выборкам, чтобы найти, какие выборки обновят какие массивы (aединый массив индексов), но мое общее спасение заключается в том, что теперь я могу содержать ОДИН двойник, который обновляется для каждого образца, который обновляет данный массив для данного измерения этого образца.
Этот дубль затем может быть приведен к соответствующему типу с низкой точностью, в моем случае, к байту.
Общая экономия с точки зрения дискового пространства, на которое я изначально рассчитывал, составила:
замените целые числа (стоимостью 4 * 128 * numberOfSamples) байтами (стоимостью 1 * 128 * numberOfSamples)
, которые не сработали, но сейчас я сформулировал решение, которое стоит что-то вроде: (128 *numberOfSamples + numberOfSamples).Экономия 127 * число образцов.Что в моем худшем случае составляет что-то около 15 Гб оперативной памяти: -)
Так что да, мы идем, ночной сон, и я ответил на свой вопрос.
Спасибо за помощь, ребята!