Я пытаюсь скопировать необработанные данные для создания гистограммы. Необработанные данные были сохранены в массиве с именем data [k] (см. Код ниже). Я указал бины некоторой фиксированной ширины 0,01, а верхние граничные значения интервалов были сохранены в массиве с именем z [i]. Объединение данных было выполнено путем подсчета количества точек данных в каждом интервале между z [i] и z [i + 1]. Для этой задачи я сделал 30 интервалов, начиная с 0 до 0,3, ширина интервала составляет 0,01.
// создание бинов в z
zmin = 0.01;
for(i=0;i<30;i++){
z[i] = 0.0;
}
for(i=0;i<30;i++){
z[i] = zmin+i*zmin;
//binning the data
for(i=1;i<30;i++){
for (k=0;k<100000;k++){
if(data[k]>z[i-1] && data[k]<=z[i]){
bincount[i] += 1;
} //if
} //k loop
} //i loop
for (k=0;k<100000;k++){
if(data[k]<=z[0]){
bincount[0] += 1;
} //if
} //k loop
Элементы z [i]:
z [0] = 0,01, z [1] = 0,02 и т. Д. *
Биннинг дает точные результаты, однако по какой-то причине bincount для интервала между z [5] (= 0,06) и z [6] (0,07) оказывается равным 0, хотя фактическое количество в моих исходных данных ненулевой Аналогичным образом, учет для интервала между z [6] (= 0,07) и z [7] (= 0,08) дает ошибочный результат, который представляет собой общее количество двух упомянутых выше интервалов. Однако, когда я пишу 0,07 внутри оператора if вместо z [6] (который я пробовал отдельно), это дает правильный результат.
Я также проверил, правильно ли массив z [i] хранит значения, что кажется нормальным. Поэтому меня смущает, почему эта проблема возникает только для конкретных интервалов с границей z [6], в то время как другие бины дают правильные результаты. Я что-то здесь не так делаю?