Подсчет вхождений в списке в Mathematica (с кодом, но не полностью работающим) - PullRequest
5 голосов
/ 15 августа 2011

Моя проблема заключается в следующем: у меня есть список list, и я хочу перебрать этот список и посчитать, сколько раз каждое значение от 0 до 1 встречается в этом с шагом step.Я написал следующий код:

list = {0.2, 0.2, 0.7, 0.8, 0.17};

countingfornormal[list_, step_] := Module[{temp, num, res, i},
temp = Round[list, step];
num = {};
For[i = 0, i <= 1, i += step, {
   res = Count[temp, i];
   AppendTo[num, {i, res}];
}];
num
]

Тем не менее, при размере шага 0,01, вывод, кажется, рассчитывает только значения до 0,17.Это действительно расстраивает меня, и я не могу понять, почему.Я также отметил, что для размера шага 0,02 на выходе подсчитываются значения до 0,34.

Я округляю в начале, потому что изначально я использовал больший список со значениями примерно до 7 разрядов после десятичной дробиточка.

Я подумал, что, может быть, это проблема времени, но я не уверен, как это исправить.

Любая помощь будет принята с благодарностью.

1 Ответ

10 голосов
/ 15 августа 2011

Возможно, лучше:

list = {0.2, 0.2, 0.7, 0.8, 0.17};
b = BinCounts[list, {0, 1, 0.01}]
(*
->{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
   0, 0, 0, 0, 0, 0, 0, 0}
 *)
 BarChart@b

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...