Python numpy digitize

Python numpy digitize 函数返回数组元素所属的 bin 的索引。此数组 digitize 方法的语法是:

numpy.digitize(a, bins, right = False)

如果值超出 bin 边界,Python numpy 数组 digitize 方法将返回 0 或 len(bins)。

  • a – 值数组
  • bins – Bin 数组
  • right – 它决定 bin 是递增还是递减。
rightBin 顺序输出
递增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]