机器学习入门4_numpy的运算与聚合
目录
import numpy as np
1. numpy数组的运算
用numpy创建和运算数组要比python本身创建和运算快很多
1.1【回顾】python中List的运算
python中list的加法和与数字的乘法实际上是字符串之间的相加(乘法也可看成是加法)
例子如下:
# Python中list加法和乘法的例子
A = [i for i in range(10)]
B = [i for i in range(15,20)]
print("this is A+B:",A+B) # A,B数组的拼接
print("this is A*2:",A*2) # 两个A的拼接
# print("this is A/2:",A/2) # 无法运算
# print("this is A-B:",A-B) # 无法运算
this is A+B: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19]
this is A*2: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1.2 numpy中array的运算
1.2.1 数组自身和数组与数字的运算
若X为np.array,解释下列运算的含义
- X+1,X-1, X*2, X/2, X//2, X**2,X%2
- np.sin(X), np.power(X,3),np.log(X),np.log2(X),np.log10(X)
不熟悉的有: X//2, X**2,X%2,np.power(X,3),np.log(X),np.log2(X)
1.2.2 array的矩阵运算
X,Y都是numpy的array,矩阵的线代运算:
- Z=X.dot(Y) # 线代乘法
- Z=X.T # 转置
- Z=np.linalg.inv(X) # 求逆(方阵)
- Z=np.linalg.pinv(X) # 求广义逆(非方阵)
- Z=np.linalg.det(X) # 求行列式
此外还有特征值,特征向量,奇异值等,可自行百度
2. numpy中的聚合操作
所谓聚合,就是操作后,只剩一个数字。如求和,求最大最小值等
2.1 array聚合
这是对于array这个对象的方法,可以记忆为数组的最大值,最小值
- array.min()
- array.max()
2.2 numpy聚合
2.2.1 numpy聚合的一些方法
这是用numpy的方法对数组聚合,可以记忆为对这个数组求和,求积,求平均数,求标准差
- np.sum(arr) # arr为一个np.array
- np.prod(arr)
- np.std(arr)
- np.median(arr)
- np.var(arr)
还有一个比较特殊的特殊的方法:np.percentile
X = np.arange(100)
Y = X.reshape(4,-1)
print(Y)
Z = np.percentile(Y,q = 40) # 表示输出Z的第40%大的数,若把40改成50,则表示中位数
Z
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
6.0
2.3 关于轴
判断轴:
从最外部的方括号开始,为0轴。则其方向就为从上到下。
内部的方括号,为1轴,所以方向(单个方括号的方向)为从左到下右。
在运算时,是在顺着轴的方向运算,然后移动轴进行下一次运算,如算np.sum(A,0)时,是先加第一列,然后相加第二列,最后到第n列。
X = np.arange(20)
Y = X.reshape(4,-1)
print('Y array is: \n',Y)
print('Sum the 0 axis:')
Y0 = np.sum(Y,0)
print(Y0)
print('Sum the 1 axis:')
Y1 = np.sum(Y,1)
print(Y1)
Y array is:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
Sum the 0 axis:
[30 34 38 42 46]
Sum the 1 axis:
[10 35 60 85]
X = np.random.randint(0,30,20)
Y = X.reshape(4,-1)
print('Y array is: \n',Y)
print('Sort the 0 axis:')
Y0 = np.sort(Y,0)
print(Y0)
print('Sort the 1 axis:')
Y1 = np.sort(Y,1)
print(Y1)
Y array is:
[[ 9 13 10 23 5]
[13 27 2 28 27]
[21 9 13 9 0]
[18 19 18 5 20]]
Sort the 0 axis:
[[ 9 9 2 5 0]
[13 13 10 9 5]
[18 19 13 23 20]
[21 27 18 28 27]]
Sort the 1 axis:
[[ 5 9 10 13 23]
[ 2 13 27 27 28]
[ 0 9 9 13 21]
[ 5 18 18 19 20]]