numpy与matplotlib学习——数据可视化入门

发布于:2025-05-28 ⋅ 阅读:(24) ⋅ 点赞:(0)

引言:

数据可视化即是将计算出的结果以图表等形式展现出来,使结果更加直观,并广泛被运用在数学建模的过程中:

· NumPy库负责组织,计算数据;

· Matplotlib库负责展示数据;


NumPy库:

操作对象 —— N维数组:

ndarry的基本元素性质:

 ·轴(axes):数组的维度;

· 秩(rank):数组的维数;

· 大小(size):数组的元素个数;

· 形状(shape):x行y列;

· 类型(dtype):数组中元素的类型;

· 元素大小(itemsize):数组中元素所占的字节大小;

数组的创建:

函数 作用
np. array([x, y, z], dtype = int) 基于列表与元组创建一个初始化数组
np. arange(x, y, i ) 创建一个包含从x开始,到y结束(不包括y),步长为i的元素组成的数组。其中例如:np. arange(50)为包括0~49的元素
np. linspace(x, y, n) 创建一个从x到y,等分为n个元素的数组。
np. full( (m, n), fillvalue) 创建一个m行n列,元素全为fillvalue的数组。
np. ones( (m, n), dtype)

创建一个m行n列,元素全为1的数组

np. zeros( (m, n), dtype)

创建一个m行n列,元素全为0的数组

np. eye(n)

创建一个n行n列,对角线为1,其余元素均为0的对角阵

np. random. rand(m, n) 创建一个m行n列的随机数组

数组对象的常见操作:

数组之间的运算:

对应位置相运算:

数组和普通值之间的运算:

ndarray的基本索引与切片:

import numpy as np
a = np.array([
    [
        [0, 1, 2, 3],
        [4, 5, 6, 7],
        [8, 9, 10, 11]
    ],
    [
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23] 
    ]
])

##输出0层0行0列的元素
print(a[0][0][0]) ##或者写成a[0, 0, 0]

##输出每一层的0行0列元素:
print(a[:, 0, 0])

##输出第一层的矩阵:
print(a[0, :, :])  ##或输出a[0]

结果:
0
[ 0 12]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

array的形态变换操作:

1,reshape函数:

reshape函数改变数组的形状,不改变原数组的内容:

import numpy as np
a = np.arange(12)
print(a.reshape(2, 6))
print("-------------")
print(a.reshape(6, 2))

结果为:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
-------------
[[ 0  1]
 [ 2  3]
 [ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]]

2,resize函数:

resize函数会直接将原数组变为指定的形状,并返回一个空值(注意)。

提示:
resize()方法要求数组拥有自己的数据,若执行的对象是reshape后的结果,由于reshape方法返回的是原数据的一个视图,并不具备对该数据的修改权限,故执行后会报错。

import numpy as np
a = np.arange(12)
a.resize((2, 3))
print(a)

结果为:
[[0 1 2]
 [3 4 5]]

3,transpose(*axes)函数可以得到该矩阵的转置矩阵。

import numpy as np
a = np.arange(12).reshape((3, 4))
b = a.transpose()
b

结果为:
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

4,flatten函数:

用来将高维数组展平成一维数组:

import numpy as np
a = np.arange(12).reshape((3, 4))
b = a.flatten()
b

结果为:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

ndarray常用的统计方法:

## axis = 0,表示按列方向; axis = 1, 表示按行方向

函数 作用
sum() 按指定轴返回数组元素的和,未指定axis,即范围是全体元素
mean() 按指定轴返回数组元素的均值
max() / min() 按指定轴返回数组元素的最值
std() 按指定轴返回数组元素的标准差
argmin() / argmax() 按指定轴返回数组元素中最值元素的对应索引组成的数组
cumsum() 按指定轴返回数组元素的累和
cumprod() 按指定轴返回数组元素的累积
import numpy as np
a = np.arange(2, 20).reshape(6, 3)


print(a.sum())

print(a.sum(axis = 1))

print(a.argmin(axis = 1))

print(a.std(axis = 1))

结果为:
189
[ 9 18 27 36 45 54]
[0 0 0 0 0 0]
[0.81649658 0.81649658 0.81649658 0.81649658 0.81649658 0.81649658]

numpy的专门应用:

线性代数方面的应用:

linalg常用函数:

函数 作用
linalg. det() 计算行列式
linalg. inv() 计算逆矩阵
linalg. solve() 多元一次方程组求根
linalg. eig() 返回由特征值和特征向量构成的元组
linalg. eigvals() 计算特征值
linalg. svd() 矩阵的奇异值分解
linalg. pinv() 广义逆矩阵
import numpy as np
a = np.arange(1, 5).reshape((2, 2))

## -------- 矩阵内积, 矩阵乘法:
b = np.arange(2, 6).reshape(2, 2)
c = a.dot(b)   ##点乘

## -----计算行列式
d1 = np.linalg.det(a)

## -----求逆矩阵
d2 = np.linalg.inv(a)

## ----- 多元一次方程求根-----------

import numpy as np
a = np.array([
    [1, 1],
    [2, 4]
]) ## 方程组的系数矩阵
b = np.array([35, 94]) ##方程组右侧的常数矩阵
x = np.linalg.solve(a, b)   ##solve函数返回方程组的解
## ------ 求特征值与特征向量的元组
import numpy as np
a = np.array([
    [1, 1],
    [2, 4]
]) 
b = np.linalg.eig(a)
b

结果为:
EigResult(eigenvalues=array([0.43844719, 4.56155281]), eigenvectors=array([[-0.87192821, -0.27032301],
       [ 0.48963374, -0.96276969]]))

 多项式方面的应用:

函数 作用
poly1d (A ) 利用系数数组A生成多项式
polyval (p, k) 求多项式p,在x = k时的值
ployder(0, m = 1) 求多项式p的m阶导数, m默认为1
polyint(p, m = 1) 求多项式p的m重积分, m默认为1
polyadd(p1, p2) / polysub(p1, p2) 多项式求和,差
polymul(p1, p2) / polydiv(p1, p2) 多项式作乘除
polyfit(x, y, k) 多项式拟合,x,y为要拟合的两组数据,k为拟合多项式中的最高次幂
import numpy as np
#针对f(x) = x^3 - 2x + 1
a = np.array([1, 1, -2, 1])   ##最后一项为常数项系数,逐个往前推,缺失的项系数用0代替

f = np.poly1d(a)
print(f)

结果为:
 3     2
1 x + 1 x - 2 x + 1

#相当于分别将值代入多项式求解
f(1)
>>1

f(2)
>>9

#也可以通过polyval(f, k)求解:
np. polyval(f, 1)
>>1

 数组的文件输入与输出:

numpy中常用的文件读写函数:

1,numpy. savetext( fname, x, fmt = ' %. 18e', delimiter = ' ')

     ————将数组写入一个指定的文件中

     参数说明:

      fname:文件名;

     x: 将要被写入的数组;

      fmt:格式字符串

      delimiter:分隔符,缺省时为空格

import numpy as np

data = np.arange(50).reshape(5, 10)
np.savetxt("D:\\python_dailywork\\test.txt", data, fmt = '%d', delimiter = ',')

##注意粘贴的文件地址要避免转义

2,numpy. loadtxt(fname, dtye = np.float, delimeter = None)

   ————从指定文本文件中读取数据,并返回一个数组

 参数说明:

fname:文件名;

dtype: 文件中读入的数据以什么类型返回,默认为np.float类型

delimiter: 分隔符,缺省时为空

import numpy as np

a = np.loadtxt('D:\\python_dailywork\\test.txt', dtype = int, delimiter = ',' )

Matplotlib库:

Matplotlib主要提供了两个便捷的绘图子模块:

· pyplot:通过简单的绘图函数实现不同的绘图功能;

· pylab:两者用法相似

pyplot绘图函数的使用:

plot(x, y, s, linewidth)
——————在二维坐标系中绘制直线,曲线或离散点,返回一个列表对象

x: 横坐标的取值范围,省略时, 默认采用y数据集的索引作为x

y:与x相对应的纵坐标取值范围

(x, y实质是两个一维数组)

s: 控制线型的格式字符串,可省略

linewidth: 线的宽度
------------------------------------------------------------------
例一:输入一个列表
##
当plt.plot只传入一个列表时,会将列表元素作为y轴的值,而x轴的值默认从0开始,即
[0, 1,2];
故绘制连接的是三个点:(0, 1)(1, 2)(2, 3)
##

import matplotlib. pyplotas plt
plt.plot([1, 2, 3])
plt.show()
------------------------------------------
例二:给定三个参数:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib

x = np.linspace(0, 10, 100)
##生成一个包含100个元素的一维数组,这些元素在(0, 10)均匀分布

y = np.sin(x)
plt.plot(x, y)
plt.show()

例二:

 各种风格字符:

颜色字符:

字符 含义
r
g 绿
b
y
k
w
c 蓝绿
m 品红

 点风格字符:

符号 意义 符号 意义
极小实心点 s 正方形
. 小实心点 p 正五边形
o 大实心点 h 垂直正六边形
v 倒三角 H 水平正六边形
^ 上三角 + 十字
> 右三角 x 叉号
< 左三角 d 菱形

 线风格字符

符号 意义
- 实线
-- 破折线
虚线
-. 点横线
None 没有线

pyplot库的坐标轴以及其他标签的使用:

函数 作用
plt.axis() 获取或者设置轴属性
plt.xlim() 设置当前x轴取值范围
plt.ylim() 设置当前y轴取值范围
plt.xticks() 设置x轴刻度值与刻度标签
plt.yticks()

设置与y轴刻度值与刻度标签

plt.xlabel() 设置x轴标签
plt.ylabel() 设置y轴标签

plt.legend()

设置当前图例
plt.text() 为图形添加文字注释

plt.title()

为坐标系添加标题
import numpy as np
import matplotlib.pyplot  as plot

x = np.arange(10)
y1 = x
y2 = 2 * x
y3 = 3 * x
plt.plot(x, y1, "ro--". x, y2, "gv", x, y3, "bs-")

plt.xlim(0, 10) ## 设置x轴的区间
plt.ylim(0, 30)

plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) ##设置x轴的刻度值
plt.yticks([5, 10, 15, 20, 25, 30], ['a', 'b', 'c', 'd', 'e', 'f']) ##设置刻度值及对应标签,‘a’与5对应……

##添加图例:
plt.legend(["y1 = x", "y2 = 2x", "y3 = 3x"])

子图绘制函数:
 

子图绘制————subplot函数:
nrows:把绘图区分割为nrows行
ncols:分割为ncols列
index:当前指定子区域的索引: (在操作前需要先声明区域)
      1   2
      3   4
      5   6
-----------------------------------------------------------
具体实现:

import matplotlib.pyplot as plt
import numpy as np

plt.subplot(2, 2, 1)  ##声明是在区域1
plt.bar(range(7), [3, 4, 7, 6, 2, 8, 9])

plt.subplot(2, 2, 2)  ##声明是在区域二
plt.plot(range(7), [3, 4, 7, 6, 2, 8, 9])

plt.subplot(2, 2, 3)
plt.scatter(range(7), [3, 4, 7, 6, 2, 8, 9])

plt.subplot(2, 2, 4)
plt.barh(range(7), [3, 4, 7, 6, 2, 8, 9])

 结果展示:

 pyplot模块绘图函数示例:

函数 作用
boxplot() 绘制箱型图
bar() 绘制竖向条形图
barh() 绘制横向条形图
contour() 绘制等高线
pie() 绘制饼图
plot_date() 绘制包含日期型数据的图
polar() 绘制极坐标图
scatter() 绘制散点图
specgram() 绘制频谱图
stem() 绘制火柴杆图
step() 绘制步阶图
hist() 绘制直方图
psd() 功率谱密度

 基本使用语法:

plt.bar(x, height, width, bottom, align, color)

前两个为必选参数,分别代表柱状图中柱子中心的位置,

· x通常是一个一维数组或可迭代对象,比如列表、元组等。用于指定每个柱子的中心位置。
· height代表柱子的高度;
· width代表柱子的宽度;
· bottom代表柱子的底部位置;
· align代表柱子的对齐方式;
· color代表柱子的颜色。

其余用法相似


网站公告

今日签到

点亮在社区的每一天
去签到