numpy-线代和矩阵

numpy-线代和矩阵

创建(转换)矩阵

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

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))

矩阵运算

函数 说明
点积 np.dot(a,b) 求解两个数组的点积
点积 np.vdot(a,b) 求解两个向量的点积
内积 np.inner(a,b) 求解两个数组的内积
外积 np.outer(a,b) 求解两个向量的外积
矩阵积 np.matmul(a,b) 求解两个数组的矩阵乘积
np.tensordot(a,b) 求解张量点积
np.kron(a,b) 计算 Kronecker 乘积

numpy.dot(a,b) 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为向量点积)

对于多维数组,则是计算每个元素相关的

import numpy.matlib
import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])
print(np.dot(a,b))

[[37  40]
 [85  92]]
计算式为 [[1*11+2*13,1*12+2*14],[3*11+4*13,3*12+4*14]]
import numpy as np

a = np.array([[1,2],[3,4]])
b = np.array([[11,12],[13,14]])

# vdot 将数组展开计算内积
print (np.vdot(a,b))
130
计算式为 1*11+2*12+3*13+4*14 = 130

numpy.inner(a,b) 函数返回一维数组的向量内积。对于更高的维度,它返回最后一个轴上的和的乘积。

import numpy as np

print (np.inner(np.array([1,2,3]),np.array([0,1,0])))
# 2
# 等价于 1*0+2*1+3*0
import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[11, 12], [13, 14]])

print(b)

print(np.inner(a, b))
[[35 41]
 [81 95]]
计算公式
1*11+2*12, 1*13+2*14
3*11+4*12, 3*13+4*14

numpy.matmul(a,b) 函数返回两个数组的矩阵乘积。

import numpy.matlib
import numpy as np

a = [[1,0],[0,1]]
b = [[4,1],[2,2]]
print (np.matmul(a,b))

[[4  1]
 [2  2]]

np.linalg线代函数库

函数 说明
np.linalg.multi_dot() 矩阵相乘
np.linalg.matrix_power(data, n) 矩阵幂运算
np.linalg.cholesky(np.matrix(A)) 矩阵相乘
np.linalg.qr(mat1) qr分解
p.linalg.svd(a) 奇异值分解
np.linalg.eig(mat1) 计算一个方阵的特征值和右特征向量
np.linalg.eigh(a, UPLO=‘L’) 复厄米特矩阵的特征值和特征向量

涉及计算线性方程组、矩阵分解、矩阵计算、矩阵求逆、广义逆矩阵等

参考资料 https://www.python100.com/html/89577.html

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]))

[[ 90  96 102]
 [216 231 246]
 [342 366 390]]

np.linalg.matrix_power(data, n) 取一个方阵的(整数)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))

[[ 468  576  684]
 [1062 1305 1548]
 [1656 2034 2412]]

np.matlib矩阵函数库

函数 说明
numpy.matlib.empty() 返回一个新的矩阵
zeros numpy.matlib.zeros() 创建一个以 0 填充的矩阵
ones numpy.matlib.ones() 创建一个以 1 填充的矩阵
eye numpy.matlib.eye() 返回一个矩阵,对角线元素为 1,其他位置为零
identity numpy.matlib.identity() 返回给定大小的单位矩阵
rand numpy.matlib.rand() 创建一个给定大小的矩阵,数据是随机填充的

numpy.matlib.zeros()函数创建一个以 0 填充的矩阵。

import numpy.matlib
import numpy as np

print (np.matlib.zeros((2,2)))


# 输出结果为:
[[0. 0.]
 [0.0.]]

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。

numpy.matlib.eye(n, M,k, dtype)

n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
import numpy.matlib 
import numpy as np 

print (np.matlib.eye(n =  3, M =  4, k =  0, dtype =  float))

numpy.matlib.ones()函数创建一个以 1 填充的矩阵。

import numpy.matlib 
import numpy as np 

print (np.matlib.ones((2,2)))


[[1. 1.]
 [1. 1.]]

numpy.matlib.identity() 函数返回给定大小的单位矩阵。

import numpy.matlib 
import numpy as np 

# 大小为 5,类型位浮点型
print (np.matlib.identity(5, dtype =  float))

# 执行结果
[[ 1.  0.  0.  0.  0.] 
 [ 0.  1.  0.  0.  0.] 
 [ 0.  0.  1.  0.  0.] 
 [ 0.  0.  0.  1.  0.] 
 [ 0.  0.  0.  0.  1.]]

参考资料

https://zhuanlan.zhihu.com/p/609111535

https://geek-docs.com/numpy/numpy-tutorials/numpy-matrix.html

posted @ 2023-07-30 18:01  贝壳里的星海  阅读(43)  评论(0编辑  收藏  举报