Numpy 矩阵

1. 矩阵的创建

1.1matlib.empty()

matlib.empty() 函数返回一个新的矩阵,语法格式为:

numpy.empty(shape, dtype, order)

参数说明:

  • shape: 定义新矩阵形状的整数或整数元组
  • Dtype: 可选,数据类型
  • order: C(行序优先) 或者 F(列序优先)
import numpy as np 
print (np.matlib.empty((2,2)))# 填充为随机数据

相当于创建一个空数组

1.2 numpy.zeros()

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

import numpy as np
print (np.zeros((2,2)))

相当于创建了一个全0数组

1.3 numpy.ones()

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

import numpy as np  
print (np.ones((2,2)))

2 转置矩阵

NumPy 中除了可以使用 numpy.transpose函数来对换数组的维度,还可以 使用 T 属性。

例如有个 m 行 n 列的矩阵,使用 t() 函数就能转换为 n 行 m 列的矩阵。
在这里插入图片描述

import numpy as np 
a = np.arange(12).reshape(3,4) 
print ('原数组:')
print (a)
print ('转置数组:')
print (a.T)

注意

  • 以上创建矩阵和转置矩阵都是和创建数组和转置数组一样格式

3.单位矩阵

3.1 numpy.eye()

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

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

参数说明:

  • n: 返回矩阵的行数
  • M: 返回矩阵的列数,默认为 n
  • k: 对角线的索引
  • dtype: 数据类型
import numpy as np  
print (np.eye(n =  3, M =  4, k =  0, dtype =  float))

上述代码会产生一个3行4列的单位矩阵 因为矩阵不是正方形,所以第三个元素表示对角线的起始索引

3.2 numpy.identity()

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

单位矩阵是个方阵(形状是个正方形),从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。
在这里插入图片描述

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

表示对角线有5个1.0的单位矩阵,而且还是正方形

4 矩阵的点积

4.1 numpy.dot()

numpy.dot() 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为向量点积);
数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和: dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])。

numpy.dot(a, b, out=None)

  • a : ndarray 数组
  • b : ndarray 数组
  • out : ndarray, 可选,用来保存dot()的计算结果
arr=np.array([[1,2],[2,3]])
arr2=np.array([[2,3],[4,5]])
print(arr)
print("="*20)
print(arr2)
print("="*20)
arr3=np.dot(arr,arr2)
print(arr3)
'''
[[1 2]
 [2 3]]
====================
[[2 3]
 [4 5]]
====================
[[10 13]
 [16 21]] =[[1*2+2*4 1*3+2*5]   
            [2*2+3*4 2*3+3*5]  ]
'''

x=[[a b] [c d]]
y=[[e f] [g h]]
x,y两个二维数组使用numpy.dot()进行点积公式([[ae+bg af+bh] [ce+dg cf+dh]])

4.2 numpy.vdot()

numpy.vdot() 函数是两个向量的点积。


arr=np.array([[1,2],[2,3]])
arr2=np.array([[2,3],[4,5]])
print(arr)
print("="*20)
print(arr2)
print("="*20)
arr3=np.vdot(arr,arr2)
print(arr3)
'''
[[1 2]
 [2 3]]
====================
[[2 3]
 [4 5]]
====================
31=[1*2+2*3+2*4+3*5]

'''

x=[[a b] [c d]]
y=[[e f] [g h]]
x, y两个二维数组使用numpy.vdot()进行向量点积公式(ae+bf+cg+dh)

5 矩阵的内积(numpy.inner())

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

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

二维矩阵的内积,代码如下:


arr=np.array([[1,2],[2,3]])
arr2=np.array([[2,3],[4,5]])
print(arr)
print("="*20)
print(arr2)
print("="*20)
arr3=np.inner(arr,arr2)
print(arr3)
'''
[[1 2]
 [2 3]]
====================
[[2 3]
 [4 5]]
====================
[[ 8 14]
 [13 23]] =[ [1*2+2*3 1*4+2*5]
             [2*2+3*3 2*4+3*5]   ]
'''

x=[[a b] [c d]]
y=[[e f] [g h]]
x, y两个二维数组使用numpy.inner()进行内积公式[ [ae+bf ag+bh] [ce+df cg+dh] ]

6 矩阵相乘(numpy.matmul())

numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积
对于二维数组,它就是矩阵乘法:

arr=np.array([[1,2],[2,3]])
arr2=np.array([[2,3],[4,5]])
print(arr)
print("="*20)
print(arr2)
print("="*20)
arr3=np.matmul(arr,arr2)
print(arr3)
'''
[[1 2]
 [2 3]]
====================
[[2 3]
 [4 5]]
====================
[[10 13]
 [16 21]] =[[1*2+2*4 1*3+2*5]   
            [2*2+3*4 2*3+3*5]  ]

'''

跟矩阵点积公式一样
x=[[a b] [c d]]
y=[[e f] [g h]]
x,y两个二维数组使用numpy.dot()进行点积公式([[ae+bg af+bh] [ce+dg cf+dh]])

注意:

  • (1)数组x,y的形状要满足x.shape=(m, k) y.shape=( k,n)才能进行矩阵相乘
  • (2)只要满足(1)的条件,二维数组x和一维数组y也可以进行运算x.shape=(m, k) y.shape=( k,)

7 矩阵的行列式(numpy.linalg.det())

对于矩阵[[a,b],[c,d]],行列式计算为 ad-bc。 较大的方阵被认为是 2×2 矩阵的组合。
代码如下:

arr=np.array([[1,2],[2,3]])
print(arr)
print("="*20)
print(np.linalg.det(arr)) 
'''
[[1 2]
 [2 3]]
====================
-1.0=1*3-2*2
'''

如果一个矩阵的形状是(3,3)求它的行列式
代码如下:

arr=np.arange(9).reshape(3,3)
print(arr)
print("="*20)
print(np.linalg.det(arr)) 
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
====================
0.0
'''

x=[[a b e] [c d f] [k m n]]
公式为:np.linalg.det(x)=[a*(dn-fm)+(c(cn-fm)+e*(cm-dk)) ]

8 线性方程求解(numpy.linalg.solve())

'''
求解 
 x+y+z=6
2x+y+3z=2
x+5y+7z=12
'''
arr1=np.array([[1,1,1],[2,1,3],[1,5,7]]) #表示等式左边每个变量的系数
arr2=np.array([6,2,12])#表示等式的右边的每个值
arr3=np.linalg.solve(arr1,arr2)
# print(arr3)
# [ 2.8  6.6 -3.4] 这表示x,y,z的值

9 逆矩阵(numpy.linalg.inv())

逆矩阵(inverse matrix):设A是数域上的一个n阶矩阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。


# 逆矩阵
arr1=np.arange(4).reshape(2,2)
print(np.linalg.inv(arr1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值