1. 简介
在处理数据时,需要对数据进行分段或者区间划分,这样可以更加方便的进行数据的处理。在Python中,NumPy库中提供了多种元素的区间查找方法,可以快速地对数据进行分段或者区间处理。
2. NumPy的元素区间查找方法
2.1 np.where函数
NumPy中的np.where函数可以根据指定条件返回满足条件的元素的位置。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
# 返回数组中小于3的元素的位置
b = np.where(a < 3)
print(b)
输出结果为:
(array([0, 1]),)
np.where函数的返回值是一个tuple类型,其中包含满足条件的元素的位置信息。
2.2 np.searchsorted函数
NumPy中的np.searchsorted函数可以在已经排好序的数组中查找指定元素应该插入的位置。
import numpy as np
a = np.array([10, 20, 30, 40, 50, 60])
# 返回40应该插入的位置
b = np.searchsorted(a, 40)
print(b)
输出结果为:
3
np.searchsorted函数的返回值是一个int类型,表示指定元素应该插入的位置。
2.3 np.digitize函数
NumPy中的np.digitize函数可以根据给定的bins数组和数据值数组,将数据值数组分组成多个区间并返回每个数据值在哪个区间的位置。
import numpy as np
a = np.array([1.9, 2.5, 3.2, 4.4, 5.0])
bins = np.array([0.0, 2.0, 4.0, 6.0])
# 根据bins将a分组并返回各个元素处于哪个分组
b = np.digitize(a, bins)
print(b)
输出结果为:
[1 2 2 3 3]
np.digitize函数的返回值是一个数组,表示每个元素处于哪个分组。
3. 实战应用
3.1 温度分段处理
假设有一个包含了多个城市多天的气温数据,需要将每个城市的气温按照不同的温度段进行分类。这个时候可以使用np.digitize函数:
import numpy as np
# 生成随机气温数据
city1_temperatures = np.random.uniform(0, 100, size=50)
city2_temperatures = np.random.uniform(0, 100, size=50)
# 定义温度段分界点
bins = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
# 分别将每个城市的气温分组
city1_group = np.digitize(city1_temperatures, bins)
city2_group = np.digitize(city2_temperatures, bins)
# 输出分组结果
print("City 1 Temperatures:", city1_temperatures)
print("City 1 Group:", city1_group)
print("City 2 Temperatures:", city2_temperatures)
print("City 2 Group:", city2_group)
输出结果为:
City 1 Temperatures: [30.13635714 8.4289501 76.34622623 8.2939502 55.47035611
91.36121663 20.17601597 70.04050522 32.10810021 16.67766948
75.98865697 50.19593241 75.35778881 70.98494177 65.98661601
25.1316134 50.02390661 52.42718158 21.13710787 7.77141058
47.52960957 16.48720928 19.09176868 76.27315746 13.90349461
80.28994729 17.11099724 36.54836577 36.58231822 41.70581297
15.30520708 73.35364609 96.41325606 99.80893619 16.39818255
79.09792866 85.75552762 51.82746246 95.7738371 66.80697994
15.38468451 95.5101786 14.28472403 9.91857524 64.16396906
90.86441782 67.44286299 75.40263544 46.02198747 54.98624033]
City 1 Group: [ 4 1 8 1 6 10 3 9 4 2 8 6 8 9 8 2 6 6 3 1 6 2 2 8
2 10 2 4 4 5 2 9 10 10 2 10 10 6 10 8 2 10 2 1 8 10 8 8
6 6]
City 2 Temperatures: [81.13712318 23.3666037 68.93060204 9.28317298 65.12970187
3.23276289 52.02694792 43.3565164 98.75848618 95.33420696
49.32969227 86.6794182 1.83123153 77.8031615 89.50532364
89.89544106 28.91915436 91.17117915 25.59690988 1.32095582
67.89142182 93.90052519 50.95215003 18.85818339 69.41221722
66.47518721 44.14862792 73.62131721 96.49998293 57.90249954
2.35101065 73.53927783 14.30595809 38.93397072 45.74628173
35.5692265 74.2489235 72.41796537 36.54495302 1.73990596
4.24438929 3.55180269 56.59702277 28.33960901 56.06075648
20.65175442 78.40915005 98.75950592 67.15652433 71.56637072]
City 2 Group: [10 3 8 1 7 1 6 5 10 10 6 10 1 8 10 10 4 10 4 1 8 10 6 2
8 8 5 9 10 6 1 9 2 4 5 4 9 9 4 1 1 1 6 4 6 2 9 10
8 9]
分组成功!
3.2 查询分组数据
可以使用np.where函数结合前面的分组数据查询出满足特定条件的元素:
import numpy as np
city1_temperatures = np.random.uniform(0, 100, size=50)
bins = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
city1_group = np.digitize(city1_temperatures, bins)
# 查询出气温处于30-50度范围内的元素
b = np.where((city1_temperatures >= 30) & (city1_temperatures <= 50))
print(city1_temperatures[b])
输出结果为:
[36.52151062 37.05871113 48.64726811 44.85511072 48.45169063 47.45227982
37.31010427 41.41103985 30.02665216 44.11607025 35.481667 38.78468799
35.98205729 42.16332984 36.17957481]
成功查询出了处于30-50度范围内的元素!
总结
本文介绍了NumPy的元素区间查找方法,包括np.where函数、np.searchsorted函数和np.digitize函数,并以温度分段处理为例进行了实战演练。