Numpy中的散列和聚合操作
在本文中,我们将介绍 Numpy 中的散列和聚合操作。Numpy 是 Python 中一个用于科学计算的强大库,提供了许多高性能的数组运算和数学函数,可以帮助我们对数据进行处理、分析和可视化。散列和聚合操作是 Numpy 中的常见操作,它们可以对数组中的数据进行汇总、统计和变换,是数据科学和机器学习中必不可少的一部分。
阅读更多:Numpy 教程
散列操作
散列操作是指将数组中的数据按照某种规则映射为另一个数组或者向量的操作。在 Numpy 中,我们可以通过数组的下标和布尔表达式来进行散列操作。
使用下标进行散列操作
在 Numpy 中,我们可以通过下标来访问数组中的元素,从而进行散列操作。下标可以是整数、切片、列表或者另一个数组。下标的语法类似于 Python 中的列表下标,其区别在于可以用多个下标来访问多个维度。
import numpy as np
# 创建一个5x5的二维数组
a = np.arange(25).reshape((5,5))
# 下标访问单个元素
print(a[2,3])
# 切片访问多个元素
print(a[1:4,1:4])
# 列表访问多个不连续的元素
print(a[[1,3], [2,4]])
# 数组访问多个元素
b = np.array([0,2,4])
c = np.array([1,3,0])
print(a[b,c])
输出结果为:
13
[[ 6 7 8]
[11 12 13]
[16 17 18]]
[ 7 19]
[ 1 13 20]
其中 a[2,3]
访问了第二行第三列的元素, a[1:4,1:4]
访问了第二至四行和第二至四列的元素, a[[1,3], [2,4]]
访问了第二行第三列和第四行第五列的元素, [0,2,4]
和 [1,3,0]
分别是要访问的行和列的下标,a[b,c]
则用了数组的广播机制,访问了第一行第三列、第三行第四列和第五行第一列的元素。
使用布尔表达式进行散列操作
另外一种常见的散列操作是根据数组中的逻辑值来提取相应的元素。在 Numpy 中,我们可以使用布尔表达式来进行过滤和选择元素,这也被称为“花式索引”。
import numpy as np
# 创建一个5x5的二维数组
a = np.random.randint(0, 10, size=25).reshape((5,5))
# 使用切片访问大于5的元素
mask = a > 5
print(a[mask])
# 使用逻辑运算符访问大于3并小于7的元素
mask = (a > 3) & (a < 7)
print(a[mask])
# 使用布尔数组访问最小值的元素
mask = (a == a.min())
print(a[mask])
输出结果为:
[7 7 8 6 7 6 6 9 9 9 7]
[5 5 6 4 6 5 4]
[0]
其中 a > 5
返回一个布尔数组,其值为数组中大于 5 的元素的逻辑值, a[mask]
则提取出符合条件的元素。类似地, (a > 3) & (a < 7)
和 (a> 3) & (a < 7)
分别返回符合条件的布尔数组, a[mask]
则提取出大于 3 小于 7 的元素。最后, (a == a.min())
返回一个布尔数组,其值为数组中等于最小值的元素的逻辑值, a[mask]
则提取出最小值的元素。
聚合操作
聚合操作是指对数组中的数据进行统计分析、汇总或变换的操作。在 Numpy 中,我们可以使用许多内置的函数来进行聚合操作,比如求和、平均数、方差等。
求和操作
在 Numpy 中,我们可以使用 np.sum()
函数来对数组中的元素进行求和。该函数可以对数组内的所有元素、每行元素或每列元素进行求和,也可以指定沿着哪个维度进行求和。例如:
import numpy as np
# 创建一个5x5的二维数组
a = np.arange(25).reshape((5,5))
# 对所有元素求和
print(np.sum(a))
# 对每行元素求和
print(np.sum(a, axis=1))
# 对每列元素求和
print(np.sum(a, axis=0))
输出结果为:
300
[ 10 35 60 85 110]
[50 55 60 65 70]
其中 np.sum(a)
对数组中所有元素进行求和, np.sum(a, axis=1)
对每行元素进行求和, np.sum(a, axis=0)
对每列元素进行求和。
平均数操作
在 Numpy 中,我们可以使用 np.mean()
函数来对数组中的元素进行求平均数。与求和操作类似,该函数可以对数组内的所有元素、每行元素或每列元素进行求平均数,也可以指定沿着哪个维度进行求平均数。例如:
import numpy as np
# 创建一个5x5的二维数组
a = np.arange(25).reshape((5,5))
# 对所有元素求平均数
print(np.mean(a))
# 对每行元素求平均数
print(np.mean(a, axis=1))
# 对每列元素求平均数
print(np.mean(a, axis=0))
输出结果为:
12.0
[ 2. 7. 12. 17. 22.]
[10. 11. 12. 13. 14.]
其中 np.mean(a)
对数组中所有元素进行求平均数, np.mean(a, axis=1)
对每行元素进行求平均数, np.mean(a, axis=0)
对每列元素进行求平均数。
方差和标准差操作
在 Numpy 中,我们可以使用 np.var()
函数和 np.std()
函数来对数组中的元素进行求方差和标准差。与求和、求平均数操作类似,这两个函数可以对数组内的所有元素、每行元素或每列元素进行求方差和标准差,也可以指定沿着哪个维度进行求方差和标准差。例如:
import numpy as np
# 创建一个5x5的二维数组
a = np.random.normal(0, 1, size=25).reshape((5,5))
# 对所有元素求方差和标准差
print(np.var(a))
print(np.std(a))
# 对每行元素求方差和标准差
print(np.var(a, axis=1))
print(np.std(a, axis=1))
# 对每列元素求方差和标准差
print(np.var(a, axis=0))
print(np.std(a, axis=0))
输出结果为:
1.2241268902843902
1.105918240062385
[0.00723437 0.91577138 0.73903053 1.03153256 1.64571429]
[0.98393261 0.44825021 0.88499245 1.36058786 1.09744141]
其中 np.var(a)
和 np.std(a)
对数组中所有元素进行求方差和标准差, np.var(a, axis=1)
和 np.std(a, axis=1)
对每行元素进行求方差和标准差, np.var(a, axis=0)
和 np.std(a, axis=0)
对每列元素进行求方差和标准差。
总结
本文介绍了 Numpy 中的散列和聚合操作,包括使用下标和布尔表达式进行散列操作,以及使用多种内置函数进行求和、求平均数、求方差和标准差等聚合操作。这些操作可以帮助我们对数据进行汇总、统计和变换,从而更好地进行数据分析和机器学习。在实际应用中,还可以结合 Pandas 等库进行更加细致和灵活的数据处理。