Numpy11 --- 线性代数(线性代数库numpy.linalg,矩阵库 numpy.matlib,)

Matrix

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 [1] ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出
在numpy中,我们知道了第一种数据类型,数组ndarry,而矩阵则是另一种数据存储形式,矩阵matrix。

区别:

  • 在数组中数据只能够以列表形式用逗号分割

创建(转换)矩阵(mat)

一般我们先创建数组,然后将其转化为矩阵

np.mat(data, dtype=None)

  • data:数据或者数组
  • dtype:数据格式
import numpy as np

arr1 = np.array(
    [[1, 2, 3],
    [4, 5, 6],
     [7, 8, 9]]
)
print(type(arr1))
a = np.mat(arr1)
print(type(a))

在这里插入图片描述

import numpy as np

# zeros
a = np.mat(np.zeros((2,2)))
print(a)
print("*"*10)

# ones
a = np.mat(np.ones((2,2)))
print(a)
print("*"*10)

# empty
a = np.mat(np.empty((2,2)),dtype=float)
print(a)
print("*"*10)

# eye
a = np.mat(np.eye(3))
print(a)
print("*"*10)

在这里插入图片描述

矩阵运算

数据

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])

mat2 = np.mat(
    [
        [11,12, 13],
        [14, 15, 16],
        [17, 18, 19],
    ])
方法作用
dot两个数组相乘 (点积)
vdot两个向量相乘(点积)
inner两个数组的内积
matmul两个数组的矩阵积
determinant求数组的行列式
solve求解线性矩阵方程
inv计算矩阵的乘法逆矩阵

dot和vdot(点积)

点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积

# 求点积
print(np.dot(mat1,mat2))

在这里插入图片描述

inner(内积)

矩阵的内积参照向量的内积的定义是:两个向量对应分量乘积之和

# 求内积
print(np.inner(mat1, mat2))

在这里插入图片描述

matmul(矩阵积)

# 求矩阵积
print(np.matmul(mat1, mat2))

在这里插入图片描述

线性代数函数库 linalg

矩阵和向量积

multi_dot(矩阵相乘)

计算单个函数调用中两个或多个数组的点积,自动选择最快的评估顺序。

这里是引用

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])

mat2 = np.mat(
    [
        [11,12, 13],
        [14, 15, 16],
        [17, 18, 19],
    ])

# 点积
print(np.linalg.multi_dot([mat1, mat2]))

在这里插入图片描述

matrix_power(矩阵幂运算)

取一个方阵的(整数)n次方

np.linalg.matrix_power(data, n)

  • data :需要计算矩阵
  • n:次方数
import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])

mat2 = np.mat(
    [
        [11,12, 13],
        [14, 15, 16],
        [17, 18, 19],
    ])

# 求矩阵幂
print(np.linalg.matrix_power(mat1, 3))

在这里插入图片描述

分解

cholesky(柯列斯基分解)

计算矩阵的柯列斯基分解

np.linalg.cholesky(np.matrix(A))

	>>> A = np.array([[1,-2j],[2j,5]])
    >>> A
    array([[ 1.+0.j, -0.-2.j],
           [ 0.+2.j,  5.+0.j]])
    >>> L = np.linalg.cholesky(A)
    >>> L
    array([[1.+0.j, 0.+0.j],
           [0.+2.j, 1.+0.j]])
    >>> np.dot(L, L.T.conj()) # verify that L * L.H = A
    array([[1.+0.j, 0.-2.j],
           [0.+2.j, 5.+0.j]])
    >>> A = [[1,-2j],[2j,5]] # what happens if A is only array_like?
    >>> np.linalg.cholesky(A) # an ndarray object is returned
    array([[1.+0.j, 0.+0.j],
           [0.+2.j, 1.+0.j]])
    >>> # But a matrix object is returned if A is a matrix object
    >>> np.linalg.cholesky(np.matrix(A))
    matrix([[ 1.+0.j,  0.+0.j],
            [ 0.+2.j,  1.+0.j]])
qr (qr分解)

计算矩阵的qr分解

np.linalg.qr(mat1)

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])
q, r = np.linalg.qr(mat1)
print(q)
print(r)

在这里插入图片描述

svd(奇异值分解)

奇异值分解

np.linalg.svd(a, full_matrices=True, compute_uv=True, hermitian=False)

Examples
    --------
    >>> a = np.random.randn(9, 6) + 1j*np.random.randn(9, 6)
    >>> b = np.random.randn(2, 7, 8, 3) + 1j*np.random.randn(2, 7, 8, 3)

    Reconstruction based on full SVD, 2D case:

    >>> u, s, vh = np.linalg.svd(a, full_matrices=True)
    >>> u.shape, s.shape, vh.shape
    ((9, 9), (6,), (6, 6))
    >>> np.allclose(a, np.dot(u[:, :6] * s, vh))
    True
    >>> smat = np.zeros((9, 6), dtype=complex)
    >>> smat[:6, :6] = np.diag(s)
    >>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
    True

    Reconstruction based on reduced SVD, 2D case:

    >>> u, s, vh = np.linalg.svd(a, full_matrices=False)
    >>> u.shape, s.shape, vh.shape
    ((9, 6), (6,), (6, 6))
    >>> np.allclose(a, np.dot(u * s, vh))
    True
    >>> smat = np.diag(s)
    >>> np.allclose(a, np.dot(u, np.dot(smat, vh)))
    True

    Reconstruction based on full SVD, 4D case:

    >>> u, s, vh = np.linalg.svd(b, full_matrices=True)
    >>> u.shape, s.shape, vh.shape
    ((2, 7, 8, 8), (2, 7, 3), (2, 7, 3, 3))
    >>> np.allclose(b, np.matmul(u[..., :3] * s[..., None, :], vh))
    True
    >>> np.allclose(b, np.matmul(u[..., :3], s[..., None] * vh))
    True

    Reconstruction based on reduced SVD, 4D case:

    >>> u, s, vh = np.linalg.svd(b, full_matrices=False)
    >>> u.shape, s.shape, vh.shape
    ((2, 7, 8, 3), (2, 7, 3), (2, 7, 3, 3))
    >>> np.allclose(b, np.matmul(u * s[..., None, :], vh))
    True
    >>> np.allclose(b, np.matmul(u, s[..., None] * vh))
    True

    """

矩阵特征值

eig(特征值)

计算一个方阵的特征值和右特征向量

np.linalg.eig(mat1)

import numpy as np

mat1 = np.mat(
    [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])
w, v = np.linalg.eig(mat1)
print(w)
print(v)

在这里插入图片描述

eigh

返回复厄米特矩阵的特征值和特征向量(共轭对称)或实对称矩阵。

np.linalg.eigh(a, UPLO=‘L’)

w, v = np.linalg.eigh(mat1)
print(w)
print(v)

在这里插入图片描述

eigvals
eigvalsh

规范及其他数字

norm
cond
det
matrix_rank
slogdet

解方程和逆矩阵

solve
tensorsolve
lstsq
inv
pinv
tensorinv

  • 后续会不断完善更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值