numpy库
求和相关
使用求和函数sum([axis=0|1])
,根据参数不同可实现不同求和方式。
矩阵整体数据的求和运算
使用无参求和函数,可实现对矩阵整体数据的求和运算。
from numpy import mat
sample = mat([[1, 2], [3, 4]]
sample.sum()
执行结果: 10 10 10。
矩阵按列求和运算
求和函数参数axis=0
时,可实现矩阵按列求和运算。
from numpy import mat
sample = mat([[1, 2], [3, 4]]
sample.sum(axis=0)
执行结果,返回求和结果的行向量 [ 4 , 6 ] \begin{bmatrix}4, 6\end{bmatrix} [4,6]。
矩阵按行求和运算
求和函数参数为axis=1
时,可实现矩阵按行求和运算。
from numpy import mat
sample = mat[[1, 2], [3, 4]]
sample.sum(axis=1)
执行结果,返回求和结果的列向量 [ 3 7 ] \begin{bmatrix} 3\\ 7\end{bmatrix} [37]。
求取最大/最小值
使用求取值最大函数max([axis=0|1])
/最小值函数min([axis=0|1])
,可求取矩阵中/行中/列中最大元素,参数意义参照求和函数,不再赘述。
求取矩阵特征值、特征向量
from numpy import mat, linalg
a = mat([[2, 3], [2, 1]])
c, d = linalg.eig(a)
print('特征值:' + c)
print('特征向量:' + d)
执行结果:
特
征
值
:
[
4
−
1
]
特征值:\begin{bmatrix}4&-1\end{bmatrix}
特征值:[4−1]
特
征
向
量
:
[
[
0.83205029
,
−
0.70710678
]
,
[
0.5547002
,
0.70710678
]
]
,
即
:
[
0.83205029
−
0.70710678
0.5547002
0.70710678
]
特征向量:[[0.83205029,-0.70710678],[0.5547002,0.70710678]],即: \begin{bmatrix}0.83205029&-0.70710678 \\ 0.5547002&0.70710678\end{bmatrix}
特征向量:[[0.83205029,−0.70710678],[0.5547002,0.70710678]],即:[0.832050290.5547002−0.707106780.70710678]
特征值
4
4
4的特征向量为
[
0.83205029
0.5547002
]
\begin{bmatrix}0.83205029 \\ 0.5547002\end{bmatrix}
[0.832050290.5547002]。
元素复制
tile
函数可以将原数据向不同维度方向复制。
import numpy as np
a = np.mat([1, 2], [3, 4])
b = np.tile(a, (3, 2))
print(b)
执行结果:
[
1
2
1
2
3
4
3
4
1
2
1
2
3
4
3
4
1
2
1
2
3
4
3
4
]
\begin{bmatrix} 1&2&1&2 \\ 3&4&3&4 \\ 1&2&1&2 \\ 3&4&3&4 \\1&2&1&2 \\ 3&4&3&4 \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎢⎡131313242424131313242424⎦⎥⎥⎥⎥⎥⎥⎤
将原始数据
[
1
2
3
4
]
\begin{bmatrix} 1&2 \\ 3&4 \end{bmatrix}
[1324]的第一维度数据复制3次,将第二维度数据复制2次得到。
统计矩阵中某元素出现次数
通过numpy.sum()
函数添加相关判断条件可实现。
import numpy as np
a = np.ones((4, 4))
a[1: 3, 1: 3] = 0
print(np.sum(a == 0))
上述所构造矩阵为 [ 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡1111100110011111⎦⎥⎥⎤,执行结果为: 4 4 4。
检索矩阵中某元素及其索引
import numpy as np
a = np.ones((4, 4))
a[1: 3, 1: 3] = 0
上述所构造矩阵为 [ 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡1111100110011111⎦⎥⎥⎤,下面使用不同的方法检索该矩阵中的元素。
1.numpy.where()
numpy.where()
函数可分别获取在各个维度上,符合标准的相关元素的索引。该函数的返回结果出发点为数据的维度。
该函数返回结果为
n
n
n个一维行向量,
n
n
n为查询矩阵的维度,每个向量中的值代表在该维度下的索引。比如在第一维度下有向量
[
2
3
5
7
]
\begin{bmatrix} 2 & 3 & 5 & 7 \end{bmatrix}
[2357],则代表查询到4个符合条件的值,这4个元素在第一维度下的索引分别为
2
,
3
,
5
,
7
2,3,5,7
2,3,5,7。
np.where(a == 0)
在本例中构造了一个二维矩阵,因此运行结果返回 2 2 2个一维向量,运行结果: [ 1 1 2 2 ] [ 1 2 1 2 ] \begin{matrix} \begin{bmatrix} 1 & 1 & 2 & 2 \end{bmatrix} \\ \begin{bmatrix} 1 & 2 & 1 & 2 \end{bmatrix} \end{matrix} [1122][1212],分别提取数据在各个维度的索引,即可定位数据的索引。由此可知公有 4 4 4个符合条件的数据,其索引(坐标)分别为 [ 1 1 ] \begin{bmatrix}1 \\ 1\end{bmatrix} [11] [ 1 2 ] [ 2 1 ] \begin{bmatrix}1 \\ 2\end{bmatrix} \begin{bmatrix}2 \\ 1\end{bmatrix} [12][21] [ 2 2 ] \begin{bmatrix}2 \\ 2\end{bmatrix} [22]。
2.numpy.argwhere()
与上述方法不同的是,numpy.argwhere()
函数返回为符合条件的元素在各个维度上的索引。该函数的返回结果出发点为元素。
该函数返回结果为
m
m
m个
n
n
n维行向量,
m
m
m为符号条件的元素个数,
n
n
n为查询矩阵的维度。比如当前返回结果为
[
1
2
3
]
[
4
5
6
]
\begin{bmatrix}1 & 2 & 3\end{bmatrix} \begin{bmatrix} 4 & 5 & 6 \end{bmatrix}
[123][456],返回两个3维行向量,则表示符合标准的有2个元素,其中第一个元素在各个维度的索引(即坐标)为
(
1
,
2
,
3
)
(1,2,3)
(1,2,3),第二个元素在各个维度上的索引为
(
4
,
5
,
6
)
(4,5,6)
(4,5,6)。
np.argwhere(a == 0)
本例中构造了一个二维矩阵,符合条件的有 4 4 4个元素,因此运行结果返回 4 4 4个二维行向量,运行结果: [ 1 1 ] [ 1 2 ] [ 2 1 ] [ 2 2 ] \begin{matrix} \begin{bmatrix} 1 & 1 \end{bmatrix} \\ \begin{bmatrix} 1 & 2 \end{bmatrix} \\ \begin{bmatrix} 2 & 1 \end{bmatrix} \\ \begin{bmatrix} 2 & 2 \end{bmatrix} \end{matrix} [11][12][21][22],每一个行向量都是一个符合要求的元素在各个维度上的索引(坐标)。
获取矩阵非零元素索引
numpy.nonzero(x)
返回非零元素在各个维度上的索引,等价于numpy.where(x == 0)
import numpy as np
a = np.mat([[1, 2], [0, 4]])
indices_nonzero = np.nonzero(a)
print(indices_nonzero)
所构造矩阵为
[
1
2
0
4
]
\begin{bmatrix} 1 & 2 \\ 0 & 4 \end{bmatrix}
[1024]。
执行结果:
[
0
0
1
]
[
0
1
1
]
\begin{matrix}\begin{bmatrix}0 & 0 & 1\end{bmatrix}\\ \begin{bmatrix}0 & 1 & 1\end{bmatrix}\end{matrix}
[001][011],则可知有在矩阵
a
a
a中有3个非零元素,其坐标索引分别为
[
0
0
]
[
0
1
]
[
1
1
]
\begin{matrix} \begin{bmatrix} 0 \\ 0\end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} \end{matrix}
[00][01][11]。
sklearn库
官方API文档:https://scikit-learn.org/stable/modules/classes.html
数据预处理
sklearn.preprocessing
包含数据缩放、归一化、二值化等方法。
归一化
MinMaxScaler([feature_range=(m, n), copy=true])
fearete_range
描述转化数据的范围,默认值(0, 1)
copy
是否复制原数据,默认值true
from numpy import mat
from sklearn.preprossing import MinMaxScaler
data = mat([[1, 2], [3, 4], [5, 6]])
scaler = MinMaxScaler(feature_range=(0, 1)).fit(data)
newData = scaler.transform(data)
print(newData)
执行结果,返回归一化后矩阵: [ 0 0 0.5 0.5 1 1 ] \begin{bmatrix}0&0\\0.5&0.5\\1&1\end{bmatrix} ⎣⎡00.5100.51⎦⎤
svm分类器
sklearn.svm
模块包含支持向量机算法。
from sklearn.svm import SVC
svm = SVC(kernel='rbf', C=1.0, random_state=0, gamma='auto')
svm.fit(traingData, traingLabel)
svm.predict(testData)