Python数据处理笔记(2)

numpy矩阵操作

numpy矩阵库(Matrix)
numpy中包含了一个矩阵库numpy.matlib,该模块中的函数返回的是一个矩阵,而不是ndarray对象。
一个m×n的矩阵是一个由**m行(row)n列(column)**元素排列成的矩形阵列。矩阵里的元素可以是数字、符号或数学式。
在这里插入图片描述
1、矩阵生成
在这里插入图片描述

import numpy as np###
x=np.matrix([[1,2,3],[4,5,6]]);
y=np.matrix([1,2,3,4,5,6]);#生成的是一维的矩阵
print(x,y,x[0,0],'\n',x[0][0],'\n');#x[0,0]返回行、列下标都为0的元素 ;x[0][0]的含义不一样

print('---------');
import numpy.matlib###
print(np.matlib.empty((2,2)));#填充为随机数据   shape为(2,2)
print(np.matlib.zeros((2,2)));# numpy.matlib.zeros()函数创建一个以0填充的函数
print(np.matlib.ones((2,2)));#函数创建一个以1填充的函数
print('----------------');
print(np.matlib.eye(n=3,M=4,k=0,dtype=int));#numpy.matlib.eye()函数返回一个矩阵:对角线元素为1,其他位置为0;
   ##得先import 2个。   n:返回矩阵的行数;M:返回矩阵的列数,默认为n ;k:对角线的索引;dtype:数据类型。
#numpy.matlib.identity()函数返回给定大小的单位矩阵(是方阵)
print(np.matlib.identity(4,dtype=int));#numpy.matlib.identity()大小为4,类型为整数


print(np.matlib.rand(4,4));#函数创建一个给定大小的矩阵,数据是随机填充(0,1)之间的
print('-------------------------');
i=np.matrix('1,2;3,4');#矩阵是 二维的,而ndarray是一个n维数组。两个对象都是可互换的
print(i);
j=np.asarray(i);#二维到二维  才可以转换
print(j);
k=np.asmatrix(j);
print(k);

print(x.T,y.T);# 对前面的x和y进行转置
import numpy as np###
import numpy.matlib###
print('------------------------下面查看矩阵特征值-');
x=np.matrix([[1,2,3],[4,5,6],[7,8,9]]);
print(x.mean());#,end='\n====\n');           所有元素的平均值
print(x.mean(axis=0));#,end='\n====\n');    求的是纵向的平均值
print(x.mean(axis=0));#.shape,end='\n====\n'));
print(x.mean(axis=1));#,end='\n====\n');  求的是横向的平均值
print(x.sum());   #所有元素之和
print(x.max(axis=1));#  横向最大值
print(x.argmax(axis=1));#  横向最大值的下标
print(x.diagonal());#对角线元素

A=np.matrix([[1,2,3],[4,5,6]]);
B=np.matrix([[1,2],[3,4],[5,6]]);
print(A*B);   #2 3 *3 2 2个矩阵相乘

2、常用矩阵操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

import numpy as np###
import numpy.matlib###
a=np.array([[1,2],[3,4]]);#a为2行2列数组
b=np.array([[11,12],[13,14]]);
print(np.dot(a,b));# 同2 2  ;2 2 矩阵乘法

print(np.vdot(a,b));#2个矩阵对应位置的元素相乘 然后求和得结果,numpy.vdot():返回2个向量的点积


numpy.vdot():返回2个向量的点积在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图a,x,b维数分别为nn ;n1;n1
在这里插入图片描述

import numpy as np###
print('-----------求解AX=B  非齐次-----');
A=np.array([[1,1,1],[0,2,5],[2,5,-1]]);
B=np.array([6,-4,27]);
X=np.linalg.solve(A,B);
print(X);
print(np.dot(A,X));

  1. 若n阶方阵A满足 AAT=E或者 ATA=E ,则称A为正交阵,其中E为n阶单位阵。正交阵的转置和其逆相等。若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等。两个向量正交的意思是两个向量的内积为 0
  2. 只有对角线上有非0元素的矩阵称为对角矩阵,或说若一个方阵除了主对角线上的元素外,其余元素都等于零,则称之为对角阵。
  3. 特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有m个学生,每个学生有n科成绩,这样形成的一个m\times n的矩阵就不可能是方阵,我们怎样才能描述这样普通的矩阵的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法:在这里插入图片描述
    假设A 是一个m,n 的矩阵,那么得到的U是一个m,m 的方阵(U中的向量是正交的,U里面的向量称为左奇异向量),∑是一个m,n 的矩阵(除了对角线之外的元素都是0,对角线上的元素称为奇异值),VT(V的转置)是一个n,n的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)
    那么奇异值和特征值是怎么对应起来的呢?首先,我们计算得到ATA,将会得到一个方阵,我们用这个方阵求特征值可以得到:在这里插入图片描述
    这里得到的v,就是我们上面的右奇异向量。此外我们还可以得到:
    在这里插入图片描述
    这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值类似,在矩阵∑中也是从大到小排列,而且σ的减少特别的快
  4. AX=0
    这是一个齐次线性方程组(一般的非齐次线性方程组AX=b其实也都可以化为齐次方程组的形式,所以比较普遍)
  5. SVD:奇异值分解,是在A不为方阵时的对特征值分解的一种拓展。奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征。
    对于齐次线性方程 A*X =0;当A的秩大于列数时(方程的数目比未知数的多很多),就需要求解最小二乘解,在||X||=1的约束下,其最小二乘解为矩阵A’A最小特征值所对应的特征向量。
    最小二乘解通常是方程的数目比未知数的多很多,这样求出的解只是最接近各等式的解,因为以普通方程组来解的话它通常是无解的.
    普通解一般是方程的数目与未知数一样多,这样能通常能求出唯一解.这个普通解能满足每一个等式.

    //奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解。实矩阵指的是矩阵中所有的数都是实数的矩阵。如果一个矩阵中含有除实数以外的数,那么这个矩阵就不是实矩阵。

https://pan.baidu.com/s/1dm_6S2Jwf2rH2ubjT3f4ww
提取码:38i7
参考文章
【线性代数】通俗的理解奇异值以及与特征值的区别,还有奇异值分解及其应用
齐次线性方程组的解、SVD、最小二乘法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值