在Mathematica中查找数字范围的频率

wro*_*ame 6 wolfram-mathematica

给定Mathematica中的数字列表,我如何从该列表中提取数字ab我指定的数字之间的总数?

Mr.*_*ard 10

最直接的方法是:

Count[data, x_ /; a <= x <= b]
Run Code Online (Sandbox Code Playgroud)

然而,对于大多数数据来说有更快的方法,这要归功于Carl Woll:

Tr@Unitize@Clip[data, {a, b}, {0, 0}]
Run Code Online (Sandbox Code Playgroud)

卡尔沃尔的方法特别快,但正如尤达指出的那样,如果你的列表中包含零,则它会失败,你的范围也会超过零.这是Kevin J. McCann处理这种情况的另一种方法,但仍然非常快:

Tr@UnitStep[(data - a)*(b - data)]
Run Code Online (Sandbox Code Playgroud)

作为纯函数[data,a,b]:

Tr@UnitStep[(#-#2)*(#3-#)]&
Run Code Online (Sandbox Code Playgroud)