第三章:NumPy (4)

木婉清2023/12/03

NumPy(4) 简介

image-2023123004

脑图连接open in new window

矩阵库

  • NumPy 中包含了一个矩阵库 numpy.matlib ,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象

matlib.empty()

  • matlib.empty() 函数返回一个新的矩阵
numpy.matlib.empty(shape, dtype, order)
参数描述
shape定义新矩阵形状的整数或整数元组
Dtype可选,数据类型
orderC(行序优先) 或者 F(列序优先)
import numpy.matlib
import numpy as np

print(np.matlib.empty((2, 2)))
# 填充为随机数据
运行结果

[[1.21696545e-152 1.02188498e-152] [1.99550808e+161 4.83245960e+276]]

numpy.matlib.zeros()

  • numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵
import numpy.matlib
import numpy as np

print(np.matlib.zeros((2, 2)))
运行结果

[[0. 0.] [0. 0.]]

numpy.matlib.ones()

  • numpy.matlib.ones() 函数创建一个以 1 填充的矩阵
import numpy.matlib
import numpy as np

print(np.matlib.ones((2, 2)))
运行结果

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

numpy.matlib.eye()

  • 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))
运行结果

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

numpy.matlib.identity()

  • numpy.matlib.identity() 函数返回给定大小的单位矩阵
  • 单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0
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.]]

numpy.matlib.rand()

  • numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的
import numpy.matlib
import numpy as np

print(np.matlib.rand(3, 3))
运行结果

[[0.32150496 0.36550133 0.62103423] [0.52475631 0.25503639 0.10987947] [0.35445619 0.76107111 0.50588554]]

注意

矩阵总是二维的,而 ndarray 是一个 n 维数组。 两个对象都是可互换的

线性代数模块

概览

函数描述
dot两个数组的点积,即元素对应相乘。
vdot两个向量的点积
inner两个数组的内积
matmul两个数组的矩阵积
determinant数组的行列式
solve求解线性矩阵方程
inv计算矩阵的乘法逆矩阵

numpy.dot()

  • 该函数返回两个数组的点积。
  • 对于二维向量,其等效于矩阵乘法
  • 对于一维数组,它是向量的内积
  • 对于N维数组,它是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]]

numpy.vdot()

  • 该函数返回两个向量的点积。如果第一个参数是复数, 那么它的共轭复数会用于计算
  • 如果参数id是多维数组,它就会被展开
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()

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

print(np.inner(np.array([1, 2, 3]), np.array([0, 1, 0])))
# 等价于 1*0+2*1+3*0
运行结果

2

numpy.matmul

  • numpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引的矩阵的栈,并进行相应广播
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]]

numpy.linalg.det()

  • numpy.linalg.det() 函数计算输入矩阵的行列式
  • 对于矩阵[[a,b],[c,d]],行列式计算为 ad-bc。 较大的方阵被认为是 2×2 矩阵的组合
import numpy as np

a = np.array([[1, 2], [3, 4]])

print(np.linalg.det(a))
运行结果

-2.0000000000000004

numpy.linalg.solve()

  • numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解

numpy.linalg.inv()

  • numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵
import numpy as np

x = np.array([[1, 2], [3, 4]])
y = np.linalg.inv(x)
print(x)
print(y)
print(np.dot(x, y))
运行结果

[[1 2] [3 4]] [[-2. 1. ] [ 1.5 -0.5]] [[1.0000000e+00 0.0000000e+00] [8.8817842e-16 1.0000000e+00]]

Matplotlib 库

安装 Matplotlib 库

pip install matplotlib

使用以下脚本绘制方程y=2x+ 5。

import numpy as np
from matplotlib import pyplot as plt

x = np.arange(1, 11)
y = 2 * x + 5
plt.title(" Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x, y)
plt.show()
运行结果

image-20231203162953339

Matplotlib 绘制直方图

numpy.histogram()

  • numpy.histogram() 函数是数据的频率分布的图形表示。 水平尺寸相等的矩形对应于类间隔,称为 bin,变量 height 对应于频率
  • numpy.histogram()函数将输入数组和 bin 作为两个参数。 bin 数组中的连续元素用作每个 bin 的边界
import numpy as np

a = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
np.histogram(a, bins=[0, 20, 40, 60, 80, 100])
hist, bins = np.histogram(a, bins=[0, 20, 40, 60, 80, 100])
print(hist)
print(bins)
运行结果

[3 4 5 2 1] [ 0 20 40 60 80 100]

plt()

  • Matplotlib 可以将直方图的数字表示转换为图形
  • pyplot 子模块的 plt() 函数将包含数据和 bin 数组的数组作为参数,并转换为直方图
from matplotlib import pyplot as plt
import numpy as np

a = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
plt.hist(a, bins=[0, 20, 40, 60, 80, 100])
plt.title("histogram")
plt.show()
运行结果

image-20231203162916028

IO 文件操作

NumPyndarray 对象引入了一个简单的文件格式:.npy

npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息

常用 IO函数:

  • load()save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中
  • loadtxt()savetxt() 函数处理正常的文本文件( .txt 等)

numpy.save()

  • numpy.save() 函数将数组保存到以 .npy 为扩展名的文件中
import numpy as np

a = np.array([1, 2, 3, 4, 5])

# 保存到 outfile.npy 文件上
np.save("outfile.npy", a)

b = np.load("outfile.npy")
print(b)
运行结果

[1 2 3 4 5]

同时根目录产生一个名为 outfile.npy 的文件

savetxt()

  • savetxt() 函数是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据
import numpy as np

a = np.array([1, 2, 3, 4, 5])
np.savetxt("out.txt", a)
b = np.loadtxt("out.txt")

print(b)
运行结果

[1. 2. 3. 4. 5.]

同时根目录产生一个名为 out.txt 的文件

NumPy 实例:GPS 定位

略。

编辑于 2023/12/30 15:00:41