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

引言:

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

· 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代表柱子的颜色。

其余用法相似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值