Я ищу метод логарифмического бинирования некоторых наборов данных. У нас есть данные со значениями в диапазоне от _min до _max (число с плавающей запятой >= 0), и пользователь должен иметь возможность указать различное количество ячеек _num_bins. (некоторые целые n).
Я реализовал решение, взятое из этот вопрос, и некоторую помощь по масштабированию здесь но мое решение перестает работать, когда мои значения данных лежат ниже 1,0.
class Histogram {
double _min, _max;
int _num_bins;
......
};
double Histogram::logarithmicValueOfBin(double in) const {
if (in == 0.0)
return _min;
double b = std::log(_max / _min) / (_max - _min);
double a = _max / std::exp(b * _max);
double in_unscaled = in * (_max - _min) / _num_bins + _min;
return a * std::exp(b * in_unscaled) ;
}
Когда все значения данных больше 1, я получаю ячейки хорошего размера и могу правильно строить графики. Когда значения меньше 1, ячейки получаются более или менее одинакового размера, и мы получаем их слишком много.
if(std::abs(in - x) < 0.00001)
(или другое приемлемое маленькое значение). - person Casey   schedule 23.09.2015