digitize

语法

digitize(x, bins, [right=false])

参数

x 一个浮点型、整型或 DECIMAL 类型的标量或向量。

bins 一个单调递增或递减的浮点型、整型或 DECIMAL 类型向量。

right 一个布尔值,为可选参数,设置区间包含右边界还是左边界,默认为 false(包含左边界)。

详情

返回 x 所属的 bins 的索引,返回值的数据形式与 x 一致。

right

bins 顺序

返回的索引满足

false 升序 bins 里第一个大于 x 的元素的索引
true 升序 bins 里第一个大于等于 x 的元素的索引
false 降序 bins 里第一个小于等于 x 的元素的索引
true 降序 bins 里第一个小于 x 的元素的索引

如果 x 中的值超出 bins 的左或右边界,则返回 0 或 bins 的长度。

该函数的功能和使用方法同 numpy.digitize。

例子

bins = [1,3,3,5,5]
// 返回 bins 里第一个大于 x 的元素的索引
digitize(3, bins=bins, right=false)
// output: 3
//返回 bins 里第一个大于 x 的元素的索引,由于 bins 里不存在这样的元素,返回 size(bins)
digitize(5, bins=bins, right=false)
//output: 5
// 返回 bins 里第一个大于等于 x 的元素的索引
digitize(5, bins=bins, right=true)
//output: 3
bins = reverse(bins)
digitize(5, bins=bins, right=false)
//output: 0
digitize(5, bins=bins, right=true)
//output: 2

x = [-1,0,1,2,3,4,5,6]
bins = [1,3,5]
digitize(x=x, bins=bins, right=false)
//output: [0,0,1,1,2,2,3,3]
digitize(x=x, bins=bins, right=true)
//output: [0,0,0,1,1,2,2,3]
bins = reverse(bins)
digitize(x=x, bins=bins, right=false)
//output: [3,3,2,2,1,1,0,0]
digitize(x=x, bins=bins, right=true)
//output: [3,3,3,2,2,1,1,0]

digitize 函数相较于 bucket 函数更灵活,可以自定义 bins 。以下为示例:

bucket(9 23 54 36 46 12, 12:53, 2) //报错:dataRange must be the mutltiplier of bucketNum.

因为 [12, 53) 中元素个数不能被2整除,所以不能使用 bucket 来分桶。

digitize(9 23 54 36 46 12 , 12 40 53)
// output: [0,1,3,1,2,1]

digitize 函数中,函数按照自定义的 bins 给数据分桶。