前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python矩阵计算

Python矩阵计算

作者头像
全栈程序员站长
发布2022-09-13 14:56:26
1.8K0
发布2022-09-13 14:56:26
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

1、构建矩阵 *1)、集合形式建立矩阵 asmatrix()函数。 (1)数组形式建立矩阵 函数matrix(data,dtype=None, copy=True),data为数值类型的集 合对象,dtype指定输出矩阵的类型,copy=True进行深度拷贝建 立全新的矩阵对象,copy=False仅建立基于集合对象的视图(深 度拷贝、视图的原理见5.2节内容)。功能类似于mat()函数、

代码语言:javascript
复制
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])  #先建立数组
A = np.matrix([[1,2,3],[4,5,6],[7,8,9]])  #后建立矩阵
print(a,b)

array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

代码语言:javascript
复制
  A

matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 2、构建嵌套矩阵 函数bmat(obj),obj为集合对象,这里的集合主要指数组、矩阵。

代码语言:javascript
复制
A1 = np.matrix([1,2,3])  #构建二维矩阵A1,函数matrix()自动会将一维列表转二维
B1 = np.matrix([4,5,6])   #构建二维矩阵B1
np.bmat([[A1],[B1]])    #矩阵嵌套,这里要求A1,B1长度一致,否则出错

matrix([[1, 2, 3], [4, 5, 6]]) **3、构建坐标(网格)矩阵 函数meshgrid(*xi, **kwargs),*xi代表一维坐标数组对象,如x,y,z分别代表(x,y,z)坐标值的一维数组对象;kwargs接受键值对参数,如sparsel=True返回稀疏矩阵,copy=False返回原始数组的视图。

代码语言:javascript
复制
x = np.arange(3)
y = np.arange(4)
X,Y=np.meshgrid(x,y)
print('x数组: ',x)
print('y数组: ',y)
print('X矩阵: ',X)
print('Y矩阵: ',Y)

x数组: [0 1 2] y数组: [0 1 2 3] X矩阵: [[0 1 2] [0 1 2] [0 1 2] [0 1 2]] Y矩阵: [[0 0 0] [1 1 1] [2 2 2] [3 3 3]]

2、矩阵转置及维数调整 先建立需要转置的原矩阵D。 1)、转置矩阵 用矩阵属性T把矩阵的每列转为每行(逆时针转90度)。

代码语言:javascript
复制
d = np.arange(9).reshape((3,3))
D = np.matrix(d)
D

matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

代码语言:javascript
复制
D.T    #矩阵转置

matrix([[0, 3, 6], [1, 4, 7], [2, 5, 8]]) 2)、移动轴位置到新位置 函数moveaxis(a, source, destination),a为集合对象,source为轴开始移动位置,destination为轴移入位置。从0到-1表示从左到右移动,从-1到0表示从右到左移动。

代码语言:javascript
复制
m1 = np.arange(24).reshape(2,3,4) #三维为2,二维3,一维为4
m1

array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]],

代码语言:javascript
复制
   [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])
代码语言:javascript
复制
md = np.moveaxis(m1,0,-1)  #0为m1的第三维值下标,-1指向m1的第一维位置
md

array([[[ 0, 12], [ 1, 13], [ 2, 14], [ 3, 15]],

代码语言:javascript
复制
   [[ 4, 16],
    [ 5, 17],
    [ 6, 18],
    [ 7, 19]],

   [[ 8, 20],
    [ 9, 21],
    [10, 22],
    [11, 23]]])

3)、向后滚动指定轴到结束位置 函数rollaxis(a, axis, start=0),a为数组或矩阵对象,axis为滚动结束的位置,start为开始后滚的轴。

代码语言:javascript
复制
m2 = np.arange(24).reshape(2,3,4)
print(m2)
np.rollaxis(m2,1,0).shape

[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]

[[12 13 14 15] [16 17 18 19] [20 21 22 23]]] (3, 2, 4)

4)、交换两轴位置 函数swapaxes(a, axis1, axis2),a为数组或矩阵对象,axis1为交换的第一个轴维数,axis2为交换的第二个轴维数。

代码语言:javascript
复制
m3 = np.arange(8).reshape(2,2,2)
m3

varray([[[0, 1], [2, 3]],

代码语言:javascript
复制
   [[4, 5],
    [6, 7]]])
代码语言:javascript
复制
np.swapaxes(m3,0,2)  #第一维的值与第三维的值对换

array([[[0, 4], [2, 6]],

代码语言:javascript
复制
   [[1, 5],
    [3, 7]]])

5)、转置数组的维度 函数transpose(a, axes=None),a为数组或矩阵对象,axes为转置的维度列表或元组(None默认值状态下,整体转置,同T属性)。

代码语言:javascript
复制
t1 = np.array([[1,2],[3,4]])
np.transpose(t1)   #数组转置

array([[1, 3], [2, 4]]) 3、求逆矩阵在线性代数中会求矩阵的逆矩阵,方便矩阵之间的计算。一个矩阵A可逆的充分必要条件是,行列式|A|≠0。 1)、函数inv(a)求方阵的逆矩阵,a为矩阵或数组对象。

代码语言:javascript
复制
a = np.array([[1,2],[3,4]])   #必须是方阵
m1 = np.matrix(a)
mv = np.linalg.inv(m1)       #求矩阵逆矩阵
mv

matrix([[-2. , 1. ], [ 1.5, -0.5]]) 检查逆矩阵计算结果是否正确的方法,为原矩阵和逆矩阵的积为单位矩阵。

m1*mv matrix([[1.00000000e+00, 1.11022302e-16], [0.00000000e+00, 1.00000000e+00]])

2)、广义逆矩阵(伪逆矩阵) 除了求方阵的逆矩阵外,Numpy为一般矩阵提供了求伪逆矩阵的函数pinv(a, rcond=1e-15),a为任意矩阵或数组,rcond为误差值(小奇异值)。

代码语言:javascript
复制
    a = np.arange(9).reshape((3,3))
np.linalg.pinv(a)    #求伪逆矩阵

array([[-5.55555556e-01, -1.66666667e-01, 2.22222222e-01], [-5.55555556e-02, 1.83880688e-16, 5.55555556e-02], [ 4.44444444e-01, 1.66666667e-01, -1.11111111e-01]])

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153951.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档