该博客是SVM实现中所用的几个函数的应用举例,此处单独拿出,帮助理解。
- 随机生成数据集
def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None)
生成了两个正态分布 均值分别为0,4 和4,0的正态分布 cov相同 每个分布都是100个样本点
mean1 = np.array([0, 4])
mean2 = np.array([4, 0])
cov = np.array([[0.8, 0.6], [0.6, 0.8]])
X1 = np.random.multivariate_normal(mean1, cov, 100)
y1 = np.ones(len(X1))
X2 = np.random.multivariate_normal(mean2, cov, 100)
y2 = np.ones(len(X2)) * -1
当纵坐标均值变为2时
2.numpy方法 (import numpy as np)
- np.hstack np.hstack
np.hstack(
(X1_test, X2_test))
是把矩阵进行行连接。np.vstack(
(X1_test, X2_test))
是把矩阵进行列连接。np.dot()
如果碰到的是秩为1的数组,那么执行的是对应位置的元素相乘再相加;如果遇到的是秩不为1的数组,那么执行的是矩阵相乘。但是需要注意的是矩阵与矩阵相乘是秩为2,矩阵和向量相乘秩为1。
- np.multiply()
表示的是数组和矩阵对应位置相乘,输出和输出的结果shape一致。
- np.outer()
表示的是两个向量相乘,拿第一个向量的元素分别与第二个向量所有元素相乘得到结果的一行。
- * (非np中方法)
对数组执行的是对应位置相乘,对矩阵执行的是矩阵对应位置相乘。
- np.diag(array) 中
array是一个1维数组时,结果形成一个以一维数组为对角线元素的矩阵
array是一个二维矩阵时,结果输出矩阵的对角线元素
- np.ravel()和np.flatten()
两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷贝还是返回视图,np.flatten(0返回一份拷贝,对拷贝所做修改不会影响原始矩阵,而np.ravel()返回的是视图,修改时会影响原始矩阵
- array数组 > 某个数 返回是元素的布尔类型的array
- range() 与 np.arange()
1)range()返回的是range object,而np.arange()返回的是numpy.ndarray
2)两者都是均匀地(evenly)等分区间;
3)range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。
4)range()不支持步长为小数,np.arange()支持步长为小数
- np.sum([0.5, 1.5]) 将一个数组中的元素全部加起来 此结果为 2
- array的组合
- np.eye() np.identity()
np.eye()
函数的原型:numpy.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
返回的是一个二维2的数组(N,M),对角线的地方为1,其余的地方为0.
- np.identity()
只能创建方阵 np.identity(n,dtype=None)
n,int型表示的是输出的矩阵的行数和列数都是n
dtype:表示的是输出的类型,默认是float
返回的是nxn的主对角线为1,其余地方为0的数组
- vsplit函数 (row方向)
- vsplit沿着垂直轴分割,其分割方式与hsplit用法相同。
3.cvxopt.matrix()函数
·· 把array按照dims重新排成矩阵,输入到cvxopt.solvers的矩阵都是cvxopt.matrix形式
省略dims:如果array为np.array,则为其原本形式;如果array为list,cvxopt.matrix(array,dims)认为list中用逗号分隔开的为一列
例1:array是list,则其中用逗号分隔开的为一列,dims省略则为其原本形式得到3行2列的矩阵
例2 array为np.array,则为其原本形式
例3 但是当array为一维时
故
例4 Array按 dims重新排列 得到1行6列的矩阵