numpy-7线代和矩阵

174 阅读4分钟

numpy-线代和矩阵

[TOC]

创建(转换)矩阵

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

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’)复厄米特矩阵的特征值和特征向量

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

参考资料 www.python100.com/html/89577.…

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()返回一个新的矩阵
zerosnumpy.matlib.zeros()创建一个以 0 填充的矩阵
onesnumpy.matlib.ones()创建一个以 1 填充的矩阵
eyenumpy.matlib.eye()返回一个矩阵,对角线元素为 1,其他位置为零
identitynumpy.matlib.identity()返回给定大小的单位矩阵
randnumpy.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.]]

参考资料

zhuanlan.zhihu.com/p/609111535

geek-docs.com/numpy/numpy…