Finding frequency of range of numbers in Mathematica

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


The most direct way is simply:

Count[data, x_ /; a <= x <= b]

There are however much faster ways for most data, this one thanks to Carl Woll:

Tr@Unitize@Clip[data, {a, b}, {0, 0}]

Carl Woll's method is particularly fast, but as yoda pointed out, it fails if your list contains zeros, and your range also straddles zero. Here is another method from Kevin J. McCann that handles this case, and is still very fast:

Tr@UnitStep[(data - a)*(b - data)]

As a pure function [data, a, b]:

Tr@UnitStep[(#-#2)*(#3-#)]&

Here is one approach that you can try:

freq[a_, b_, list_] := Total@Boole@Cases[list, x_ :> a <= x <= b]
lst = RandomInteger[10, 20]
Out = {6, 1, 1, 6, 3, 1, 10, 0, 2, 10, 3, 5, 9, 1, 5, 5, 3, 8, 2, 3}

freq[3, 6, lst]
Out = 9

An alternate approach using IntervalMemberQ is

freq[a_, b_, list_] :=
 Total@Boole@IntervalMemberQ[Interval[{a, b}], list]

another approach is

NumberOfNumbers[lst_?ListQ, lwr_?NumberQ, upr_?NumberQ] := 
 Length@Select[lst, (lwr <= # <= upr) &]

D

链接地址: http://www.djcxy.com/p/35618.html

上一篇: 如何在Mathematica中生成这样的图像

下一篇: 在Mathematica中查找数字范围的频率