栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【机器学习手册】【1】熟练使用向量矩阵和数组 —— 二维矩阵叉乘公式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【机器学习手册】【1】熟练使用向量矩阵和数组 —— 二维矩阵叉乘公式

前言

熟练使用python计算向量、矩阵、数组之后,是不是就不用matlab了?应该不是,matlab的函数完善,而python我还不知道缺什么函数和功能。


基本操作 创建
import numpy as np
#创建行向量[1,2,3]
print(np.array([1,2,3]))

#创建列向量[[1],[2],[3]]
print(np.array([[1],[2],[4]]))

#创建矩阵
print(np.array([[1,2,3],[4,5,6],[7,8,9]]))

#创建矩阵
print(np.mat([[1,2,3],[4,5,6],[7,8,9]])) #不推荐,因为大多数操作都是数组而不是矩阵数据结构mat


#-------创建三维矩阵-------

#创建1个2X3的0矩阵
print('>',np.zeros((1,2,3)))

#创建两个2X2的0矩阵
print('>',np.zeros((2,2,2)))

#创建两个3X3的1矩阵
print('>>>',np.ones((2,3,3)))


#-----------------------


from scipy import sparse
#创建稀疏矩阵
matrix =np.array([[0,0,0,1],[0,2,0,1],[1,0,3,0]])
#创建一个压缩的稀疏行矩阵compressed sparse row
print(sparse.csr_matrix(matrix))
[1 2 3]
[[1]
 [2]
 [4]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
> [[[0. 0. 0.]
  [0. 0. 0.]]]
> [[[0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]]]
>>> [[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]
  (0, 3)	1
  (1, 1)	2
  (1, 3)	1
  (2, 0)	1
  (2, 2)	3
选择元素
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])

#第5个
print(v[5-1])
#第三行第二个元素
print(m[3-1][2-1])
print(m[2,1])


#选取向量所有元素
print(v[:])

#选取0到第三个
print(v[:3])

#选取第三个到最后
print(v[3:])

#选取最后一个
print(v[-1])


#选取矩阵全部
print(m[:])
print(m)

#选取矩阵第一行
print(m[0,:])

#选取第一行和第三行
print(m[0,:],m[2,:])

#选取第二列
print(m[:,1])
5
8
8
[1 2 3 4 5 6]
[1 2 3]
[4 5 6]
6
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[1 2 3]
[1 2 3] [7 8 9]
[2 5 8]
矩阵的属性
import numpy as np
from scipy import sparse
m = np.array([[1,2,3,4],
              [5,6,7,8],
              [9,10,11,12]])

#行,列
a = m.shape
print(a)
print('r=%d,c=%d'%(a[0],a[1]))

#元素数量
print(m.size)

#矩阵的维数
print(m.ndim)
(3, 4)
r=3,c=4
12
2

虽然矩阵有4列,但是因为4个基向量是线性相关的,最大线性无关组只有两个,维数也就只有两个。

矩阵的秩
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0]])

print(np.linalg.matrix_rank(m))
2
矩阵的迹
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0]])

print(m.trace())
15
vectorize
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])



#创建一个向量化的函数
func = np.vectorize(lambda x:x+100)  #vectorize把一个函数变成另一个函数
#对所有元素应用这个函数
print(func(m))

#直接操作也行
print(m-100)

print(m*2)

print(m/2)

[[101 102 103]
 [104 105 106]
 [107 108 109]]
[[-99 -98 -97]
 [-96 -95 -94]
 [-93 -92 -91]]
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]]
[[0.5 1.  1.5]
 [2.  2.5 3. ]
 [3.5 4.  4.5]]
最值、平均值、方差、标准差
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])

print(np.max(m))
print(np.min(m))
print(np.mean(m))
print(np.var(m))
print(np.std(m))
9
1
5.0
6.666666666666667
2.581988897471611
矩阵变形
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0]])

#变形前后元素个数一样
print(m.reshape(2,6))
[[1 2 3 0 4 5]
 [6 0 7 8 9 0]]
转置
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6,7,8,9])
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0]])

print(m.T)

#向量只是值的集合,不能转置
print(v)
print(v.T)
print(np.array([1,2,3,4,5,6,7,8,9]).T)
[[1 4 7]
 [2 5 8]
 [3 6 9]
 [0 0 0]]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
矩阵展开
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0]])

print(m.flatten())
[1 2 3 0 4 5 6 0 7 8 9 0]
高级操作 行列式
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0],
              [0,0,0,0]])

print(np.linalg.det(m))
0.0
对角线元素
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
              [4,5,6,0],
              [7,8,9,0] ])

print(m.diagonal())
[1 5 9]
特征值和特征向量
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],
              [4,5,6,0],
              [7,8,9,0],
              [0,0,1,4]])

#特征值和特征向量
a,b = np.linalg.eig(m)

print(a)
print('-------------')
print(b)
[16.33839194+0.j         -0.29035096+0.55867363j -0.29035096-0.55867363j
  3.24230999+0.j        ]
-------------
[[-0.25665901+0.j         -0.69644039+0.j         -0.69644039-0.j
   0.70851102+0.j        ]
 [-0.52018868+0.j          0.14699415-0.42878781j  0.14699415+0.42878781j
  -0.35480461+0.j        ]
 [-0.81191118+0.j          0.37461056+0.39175996j  0.37461056-0.39175996j
  -0.36840126+0.j        ]
 [-0.06580365+0.j         -0.07416678-0.10096959j -0.07416678+0.10096959j
   0.48621634+0.j        ]]

点积和叉积
import numpy as np
from scipy import sparse

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


c = np.array([[34,2],
              [1,3]])
d = np.array([[2,9],
              [0,1]])
print(np.cross(c,d)) #cross必须是两个二维矩阵相叉乘,或两个三维矩阵相叉乘


e = np.array([[1,2],
              [1,0]])
f = np.array([[3,5],
              [1,2]])
print(np.cross(e,f))
40
[302   1]
[-1  2]

两个二维矩阵叉乘公式
A = [ a 11 a 12 a 21 a 22 ] A = left[ begin{matrix} a_{11} quad a_{12} \ a_{21} quad a_{22} \ end{matrix}\ right] A=[a11​a12​a21​a22​​]
B = [ b 11 b 12 b 21 b 22 ] B = left[ begin{matrix} b_{11} quad b_{12} \ b_{21} quad b_{22} \ end{matrix} right] B=[b11​b12​b21​b22​​]

A × B = [ a 11 b 12 − a 12 b 11 a 21 b 22 − a 22 b 21 ] Atimes B = left[ begin{matrix} a_{11}b_{12} - a_{12}b_{11} qquad a_{21}b_{22} - a_{22}b_{21}end{matrix}right] A×B=[a11​b12​−a12​b11​a21​b22​−a22​b21​​]

矩阵的逆
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],
              [4,5,6,4],
              [7,8,9,2],
              [1,3,12,5]])

print(np.linalg.inv(m))
[[ 8.42857143e+00 -2.01428571e+01  1.04285714e+01  1.42857143e-01]
 [-8.85714286e+00  2.12857143e+01 -1.08571429e+01 -2.85714286e-01]
 [ 1.09523810e+00 -2.80952381e+00  1.42857143e+00  1.42857143e-01]
 [ 1.00000000e+00 -2.00000000e+00  1.00000000e+00  1.70803542e-17]]
生成随机数
import numpy as np

#设置随机数种子
np.random.seed(0)

#生成3个0到1的数
print(np.random.random(3))  #默认0~1

#生成3个1到100的整数
print(np.random.randint(0,101,3))

#从1<=x<2 中抽3个
print(np.random.uniform(1,2,3))

#正态分布
#平均值0,标准差1
print(np.random.normal(0,1,3))

#逻辑分布
#平均值0,散布程度1
print(np.random.logistic(0,1,3))
[0.5488135  0.71518937 0.60276338]
[67  9 83]
[1.64589411 1.43758721 1.891773  ]
[-0.10321885  0.4105985   0.14404357]
[ 0.27387744  2.52093742 -2.57088231]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号