Numpy的数学与统计函数
一、概述
Numpy中定义了多个数学统计函数,可以对整个数组或者某个轴向的数据进行统计计算,包括数组中数据的描述性统计计算,数组变形运算、数据处理等。
二、统计运算
- sum 求和
- mean 求平均值
- var 方差
- std 标准差
- max 最大值
- min 最小值
- cunsum 累计和 从开始索引到该索引处所有元素的和
- cumprod 累计积 从开始索引到该索引处所有元素的积
- argmax 最大元素索引
- argmin 最小元素索引
下面的例子:
import numpy as np
arr = np.arange(25).reshape(5,5)
print(arr.sum())
print(arr.mean())
print(arr.var())
print(arr.std())
print(arr.max())
print(arr.min())
print(arr.cumsum())
print(arr.cumprod())
print(arr.argmin())
print(arr.argmax())
输出:
300
12.0
52.0
7.211102550927978
24
0
[ 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153
171 190 210 231 253 276 300]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
0
24
三、矩阵计算
Numpy中的二维数组可以被看作是矩阵,矩阵运算对应的是元素量级,Numpy中定义了一些矩阵运算的相关函数,比如矩阵的转置函数,矩阵的点乘,矩阵的迹
(1)矩阵的转置
arr1 = np.arange(16).reshape(4,4)
print(arr1)
print(arr1.T)
输出结果
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
(2)矩阵的逆
使用np.linalg.inv函数来获得
print(np.linalg.inv(arr1))
[[ 9.00719925e+14 -4.50359963e+14 -1.80143985e+15 1.35107989e+15]
[-2.40191980e+15 2.70215978e+15 1.80143985e+15 -2.10167983e+15]
[ 2.10167983e+15 -4.05323966e+15 1.80143985e+15 1.50119988e+14]
[-6.00479950e+14 1.80143985e+15 -1.80143985e+15 6.00479950e+14]]
(3)矩阵的加减法
两个矩阵相加减,直接使用加减号即可,但是要保证两个矩阵的结构相同
arr2 = np.array([1,2,3,4],dtype = np.int32)
arr3 = np.array([-1,-2,-3,-4],dtype = np.int32)
print(arr2 + arr3)
[0 0 0 0]
(4)矩阵的乘法和矩阵的点乘
矩阵的乘法和点乘不同,矩阵的点乘是两个结构相同的矩阵对应的元素进行相乘,从而得到一个新的矩阵,而矩阵的乘法是将第一个矩阵的第m行元素与第二个矩阵的第n列元素对应相乘并求和,得到的结果矩阵中(m,n)点对应的元素。矩阵的点乘直接对两个矩阵使用乘号进行连接,二矩阵的乘法对于第一个矩阵使用.dot函数,传入第二个矩阵的转置矩阵作为函数的参数
import numpy as np
arr1 = np.arange(25).reshape(5,5)
arr2 = np.arange(25).reshape(5,5)
# 矩阵的点乘
print(arr1 * arr2)
# 矩阵的乘法
print(arr1.dot(arr2.T))
输出:
[[ 0 1 4 9 16]
[ 25 36 49 64 81]
[100 121 144 169 196]
[225 256 289 324 361]
[400 441 484 529 576]]
[[ 30 80 130 180 230]
[ 80 255 430 605 780]
[ 130 430 730 1030 1330]
[ 180 605 1030 1455 1880]
[ 230 780 1330 1880 2430]]
(5)矩阵的迹
在线性代数中,矩阵的迹就是矩阵主对角线上各个元素的和,Numpy使用np.trace来获得矩阵的迹
(6)特征值与特征向量
相关概念,参考线性代数
eigvalue,eigvector = np.linalg.eig(arr1)
print(eigvalue)
print(eigvector)
输出:
[ 6.39116499e+01 -3.91164992e+00 -4.06523933e-15 2.58443073e-16
1.51528038e-15]
[[-0.0851802 0.67779864 -0.46549901 0.18772213 -0.00207481]
[-0.23825372 0.36348873 0.55597991 -0.0514454 -0.41636356]
[-0.39132723 0.04917881 -0.15590518 -0.65194893 0.2955311 ]
[-0.54440074 -0.2651311 0.50586667 0.70734553 0.66632773]
[-0.69747425 -0.57944101 -0.44044239 -0.19167334 -0.54342046]]
四、数据处理
Numpy数组中的数据呈现有时候可能有别于项目研究的目标,需要进行数据处理,Numpy提供了一些直接对ndarray进行处理的函数。
(1)排序
使用NUmpy中的sort函数进行排序,当函数中的参数axis=0时,每一列上的元素按照行的方向进行排序,axis=1时,每一行上的元素按照列的方向进行排序。
arr2 = np.array([[2,4,3],[5,4,2],[9,0,3]])
# 排序前
print(arr2)
# 排序后 按行排序
print(np.sort(arr2,axis = 1))
# 按列排序
print(np.sort(arr2,axis = 0))
[[2 4 3]
[5 4 2]
[9 0 3]]
[[2 3 4]
[2 4 5]
[0 3 9]]
[[2 0 2]
[5 4 3]
[9 4 3]]
这里,np.sort函数返回的是已经排序的副本,对原数组进行修改
(2)去重
Numpy中提供了对一维数组去重的函数unique,该函数的返回值为数组中按照从小到大的顺序排列的非重复元素的元组或者列表
arr3 = np.array([2,43,5,54,5,234,12,1,2,1,1])
print(np.unique(arr3))
[ 1 2 5 12 43 54 234]
五、文件的读入和读出
在数据挖掘中,通常需要调用以文件的形式储存的数据,同时也可能需要把数据写入文件中,Numpy提供了文件写入和读取的函数savetxt和loadtxt以实现这两个功能。
(1)写入文件操作
Numpy写入文件:创建一个3*3的矩阵,并将其保存到文件中,使用np.savetxt保存文件。
arr4 = np.arange(9).reshape(3,3)
np.savetxt('arr4.txt',arr4)
在与代码文件同目录下,生成了一个arr4.txt文件
(2)读取文件操作
arr5 = np.loadtxt('arr4.txt')
print(arr5)
如果是csv文件,添加参数delimiter = ‘,’
over, 后续待补充。