您的位置:首页 > 编程语言 > Python开发

【python学习笔记】18:numpy数组函数与矩阵运算

2017-07-24 22:07 986 查看
*数组支持函数运算

>>> x=np.arange(0,100,10,dtype=np.floating)
>>> np.sin(x) #对每个元素计算正弦
array([ 0. , -0.54402111, 0.91294525, -0.98803162, 0.74511316,
-0.26237485, -0.30481062, 0.77389068, -0.99388865, 0.89399666])
>>> np.round(_) #四舍五入
array([ 0., -1., 1., -1., 1., -0., -0., 1., -1., 1.])
>>> x=np.random.rand(7)*10
>>> x
array([ 1.42224316, 3.95003135, 8.04936975, 9.77336697, 1.86243496,
1.51027865, 2.89026918])
>>> np.floor(x) #向下取整
array([ 1., 3., 8., 9., 1., 1., 2.])
>>> np.ceil(x) #向上取整
array([ 2., 4., 9., 10., 2., 2., 3.])对数组的函数运算也就是对每个元素的函数运算,对多维数组也是可行的。
>>> x=np.linspace(0,3.14,10)
>>> x
array([ 0. , 0.34888889, 0.69777778, 1.04666667, 1.39555556,
1.74444444, 2.09333333, 2.44222222, 2.79111111, 3.14 ])
>>> y=np.cos(x)
>>> y
array([ 1. , 0.93975313, 0.76627189, 0.50045969, 0.17434523,
-0.17277674, -0.4990802 , -0.76524761, -0.93920748, -0.99999873])
>>> np.arccos(y)
array([ 0. , 0.34888889, 0.69777778, 1.04666667, 1.39555556,
1.74444444, 2.09333333, 2.44222222, 2.79111111, 3.14 ])
>>> np.absolute([-3,-2]) #绝对值
array([3, 2])
>>> np.absolute([3+4j,2+1j]) #复数的模
array([ 5. , 2.23606798])
>>> np.log2(8) #对数
3.0
>>> np.log10(100)
2.0
>>> np.multiply([1,2,3],[4,5,6])
array([ 4, 10, 18])
>>> np.multiply(3,[4,5,6])
array([12, 15, 18])
>>> x=np.array([4,5,6])
>>> np.multiply(3,x)
array([12, 15, 18])
>>> np.multiply([1,2,3],x)
array([ 4, 10, 18])
可见multiply可以让标量、数组或list相乘。
>>> np.sqrt(x)
array([ 2. , 2.23606798, 2.44948974])
>>> np.sqrt([1,4,9])
array([ 1., 2., 3.])

*矩阵运算
>>> a_list=[3,5,7]
>>> a_mat=np.matrix(a_list) #用list对象去创建矩阵对象
>>> a_mat
matrix([[3, 5, 7]])
>>> a_mat.T #转置但不改变原矩阵
matrix([[3],
[5],
[7]])
>>> a_mat.shape #矩阵形状(行数,列数)
(1, 3)
>>> a_mat
matrix([[3, 5, 7]])
>>> a_mat.size #元素个数
3
>>> b_mat=np.matrix((1,2,3)) #用tuple对象去创建矩阵对象
>>> b_mat
matrix([[1, 2, 3]])
>>> a_mat*b_mat.T #矩阵相乘
matrix([[34]])
>>> a_mat.mean() #元素平均值
5.0
>>> a_mat.sum() #元素和
15
>>> a_mat.max(axis=1) #列最大值
matrix([[7]])
>>> a_mat.max(axis=0) #行最大值
matrix([[3, 5, 7]])
列最大值横向一列一列去看,行最大值纵向一行一行去看。
>>> c_mat=np.matrix([[1,2,3],[3,2,1],[5,4,3]])
>>> c_mat.argsort(axis=0) #纵向排序后的元素序号
matrix([[0, 0, 1],
[1, 1, 0],
[2, 2, 2]], dtype=int64)
>>> c_mat.diagonal() #对角线元素
matrix([[1, 2, 3]])
>>> c_mat.flatten() #矩阵平铺
matrix([[1, 2, 3, 3, 2, 1, 5, 4, 3]])当函数diagonal遇到的不是方阵时,返回(0,0),(1,1)..这样的元素直至超出界限。
>>> np.linalg.eig([[1,1],[2,2]]) #特征值和特征向量
(array([ 0., 3.]), array([[-0.70710678, -0.4472136 ],
[ 0.70710678, -0.89442719]]))
>>> np.cov([1,1,1,1,1]) #协方差
array(0.0)
>>> x=[-2.1,-1,4.3]
>>> y=[3,1.1,0.12]
>>> X=np.vstack((x,y)) #将x和y组合成一个矩阵
>>> X
array([[-2.1 , -1. , 4.3 ],
[ 3. , 1.1 , 0.12]])
>>> np.cov(X) #协方差
array([[ 11.71 , -4.286 ],
[ -4.286 , 2.14413333]])
>>> np.cov(x,y) #也可以直接这样用
array([[ 11.71 , -4.286 ],
[ -4.286 , 2.14413333]])还可以作矩阵求逆,如下。
>>> x=np.matrix([[2,5],[-3,-7]])
>>> y=np.linalg.inv(x) #求x的逆矩阵
>>> y
matrix([[-7., -5.],
[ 3., 2.]])
>>> x*y #验证
matrix([[ 1.00000000e+00, -1.77635684e-15],
[ 0.00000000e+00, 1.00000000e+00]])
>>> y*x #验证
matrix([[ 1., 0.],
[ 0., 1.]])
*矩阵的不同维度上的计算
>>> x=np.arange(0,10).reshape(2,5) #修改矩阵形状
>>> x
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> np.sum(x)
45
>>> np.sum(x,axis=0) #纵向求和
array([ 5, 7, 9, 11, 13])
>>> np.sum(x,axis=1) #横向求和
array([10, 35])
>>> np.mean(x,axis=0) #纵向计算算术平均值
array([ 2.5, 3.5, 4.5, 5.5, 6.5])
>>> weight=[0.3,0.7]
>>> np.average(x,axis=0,weights=weight) #纵向计算加权平均值
array([ 3.5, 4.5, 5.5, 6.5, 7.5])
>>> x=np.random.randint(0,10,size=(3,3)) #这次直接指定了形状
>>> x
array([[2, 6, 5],
[7, 4, 7],
[2, 4, 9]])
>>> np.std(x) #所有元素的标准差
2.23330569358242
>>> np.std(x,axis=1) #每行元素的标准差
array([ 1.69967317,  1.41421356,  2.94392029])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: