Python numpy digitize 函数返回数组元素所属的 bin 的索引。此数组 digitize 方法的语法是:
numpy.digitize(a, bins, right = False)
如果值超出 bin 边界,Python numpy 数组 digitize 方法将返回 0 或 len(bins)。
- a – 值数组
- bins – Bin 数组
- right – 它决定 bin 是递增还是递减。
| right | Bin 顺序 | 输出 |
|---|---|---|
| 真 | 递增 | bins[i – 1] < a <= bins[i] |
| 假 | 递增 | bins[i – 1] <= a < bins[i] |
| 真 | 递减 | bins[i – 1] >= a > bins[i] |
| 假 | 递减 | bins[i – 1] > a >= bins[i] |
Python numpy digitize 数组示例
在此程序中,我们声明了一个包含九个随机数的数组来测试 digitize 函数。
np.digitize(a, bins = [15]) – 这意味着如果 a 数组中的元素小于 15,则返回 0,如果它大于或等于 15,则返回 1。
np.digitize(a, bins = [9, 20])
- 如果元素小于 9,则返回零。
- 如果 a[n] 在 9 和 20 之间,即 9 ≤ a[n] < 20,则返回 1。
- 如果 a[n] 大于或等于 20,则返回 2。
np.digitize(a, bins = [9, 20], right = True)
- 如果元素小于或等于 9,则返回零。
- 如果 a[n] 大于 9 且小于或等于 20,即 9 < a[n] ≤ 20,则返回 1。
- 如果 a[n] 大于 20,则返回 2。
import numpy as np a = np.array([10, 20, 7, 30, 11, 1, 19, 5, 40]) b = np.digitize(a, bins = [15]) print(b) c = np.digitize(a, bins = [9, 20]) print(c) d = np.digitize(a, bins = [9, 20], right = True) print(d)
[0 1 0 1 0 0 1 0 1]
[1 2 0 2 1 0 1 0 2]
[1 1 0 2 1 0 1 0 2]
Python numpy digitize 数组示例 2
如果存在多个 bin 值,则起始和结束条件将与上述相同。但是,中间的将增加存储桶。例如,b = np.digitize(a, bins)
- 如果 a[n] 小于 3,则返回 0。
- 如果 a[n] 大于或等于 3 且小于 6,则返回 1。
- 如果 a[n] 大于或等于 6 且小于 8,则返回 2。
- 如果 a[n] 大于或等于 8,则返回 3。
import numpy as np a = np.array([1, 12, 5, 2, 7, 9, 4, 8, 10, 2]) bins = np.array([3, 6, 8]) b = np.digitize(a, bins) print(b) c = np.digitize(a, bins = [2, 4, 6, 8]) print(c)
[0 3 1 0 2 3 1 3 3 0]
[0 4 2 1 3 4 2 4 4 1]
计算 bin 频率
numpy 模块的 bincount() 函数用于计算每个 bin 的频率,并且此示例使用了该函数。
b = 4 个零、2 个一和 4 个二。
c = 1 个零、2 个一、2 个二、1 个三和 4 个四。
import numpy as np a = np.array([1, 12, 5, 2, 7, 9, 4, 8, 10, 2]) b = np.digitize(a, bins = [5, 8]) print(b) print(np.bincount(b)) c = np.digitize(a, bins = [2, 4, 6, 8]) print(c) print(np.bincount(c))
[0 2 1 0 1 2 0 2 2 0]
[4 2 4]
[0 4 2 1 3 4 2 4 4 1]
[1 2 2 1 4]