【问题标题】:Counting ocurences in a list in Mathematica (with code, but not fully working)计算 Mathematica 列表中的出现次数(有代码,但不能完全工作)
【发布时间】:2011-08-15 12:58:08
【问题描述】:

我的问题是: 我有一个列表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 位。

我认为这可能是时间问题,但我不确定如何解决这样的问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: function count wolfram-mathematica


    【解决方案1】:

    也许更好:

    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
    

    【讨论】:

    • 小心不祥的“偏移一”问题。根据您的预期结果调整结果列表起点
    • 成功了!这正是我所需要的。非常感谢,不胜感激
    • @user 请记住:如果您在 Mathematica 中为简单的任务执行循环,您很可能不了解某些预制功能和/或函数式编程方式
    • 是的……这已经发生了几次,当时我已经离开并做了一些更复杂的事情,只是为了让讲师指出另一种方式。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多