01.numpy模块
https://www.cnblogs.com/nickchen121/p/10807564.html
-
numpy模块简介 numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)
-
numpy库的两个作用
- 提供了数组间的操作、运算、统计分布和简单的数学模型
- 计算速度快,甚至要优于python内置的简单运算,使其成为pandas、sklearn等模块以来的包。高级的框架如TensorFlow、PyTorch等。其数组操作也和numpy非常相似
-
numpy的用法
-
创建numpy数组 # 三维及以上不推荐使用numpy numpy数组即numpy的内部定义的ndarray对象,创建numpy数组就是把一个list传入np.array() import numpy as np
arr = np.array([1,2,3]) # 创建一维的ndarray对象
print(arr,arr.dtype,type(arr))
ar2 = np.array([[1.,3],[2,3,4]]) # 创建二维的ndarray对象
print(ar2,ar2.dtype,type(ar2))
ar3 = np.array([[[1,3]],[[4,5,6]],[[7,8,9]]]) # 创建三维的ndarray对象
print(ar3,'n','维数:',ar3.ndim)
ar33 = np.array([[[1,[4,6],[7,9]],[[1,9]]]) # 创建三维的ndarray对象
print(ar33,ar33.ndim) [1 2 3] int64 <class 'numpy.ndarray'> # 列表内元素全为int时,数组元素的数据类型为int64
[[1. 2. 3.]
[2. 3. 4.]] float64 <class 'numpy.ndarray'> # 列表内元素有一个位为flaot时,数组元素的数据类型为flaot64
[[[1 2 3]]
[[4 5 6]]
[[7 8 9]]]
维数: 3
[[[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]]]
维数: 3
-
numpy数组的常用属性
T |
数组的转置(对高维数组而言) |
dtype |
数组元素的数据类型 |
size |
数组元素的个数 |
ndim |
数组的维数 |
shape |
数组的维度大小(以元组形式) |
astype |
类型转换 |
dtype种类:bool_,int(8,16,32,64),float(16,64) 用法 # T
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2,ar2.T) [[1. 2. 3.]
[2. 3. 4.]]
[[1. 2.]
[2. 3.]
[3. 4.]] # dtype
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2.dtpye) # flaot64 # size
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2.size) # 6 # ndim
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2.ndim) # 2 # shape 获取数组的维度大小,以元组的形式存储 # 可以用来获取数组的行列数
import numpy as np
arr = np.array([1.,2.,3.])
print('arr:',arr.shape)
ar2 = np.array([[1.,4]])
print('ar2:',ar2.shape)
ar33 = np.array([[[1,1],[1,4,7,1,9]]])
print('ar3:',ar33.shape) arr: (3,)
ar2: (2,3)
ar3: (3,4) # astype # 数组数据类型转换
# dtype种类:bool_,64)
import numpy as np
arr = np.array([1,3])
arr.astype(np.float32)
print(arr) # [1 2 3]
-
切割numpy数组 # numpy数组的切分与列表的切分方法相同
import numpy as np
ar33 = np.array([[[1,9]]])
print(ar33[:,:1,:1]) # []中有几个参数看numpy数组是几维,然后以 层->行->列 的顺序输入 不填默认所有 [[[1]]
[[1]]
[[1]]] # 通过条件筛选数值 or 判断数值
import numpy as np
ar33 = np.array([[[1,9]]])
print(ar33[ar33>2])
print(ar33>2) [3 4 5 6 7 8 9 3 4 5 6 7 8 9 3 4 5 6 7 8 9]
[[[False False True False]
[False True True True]
[False True True True]]
[[False False False True]
[False True True True]
[False True True True]]
[[False False False True]
[False True True True]
[False True True True]]]
-
numpy数组的元素替换 # 相当于列表的索引替换值
import numpy as np
ar33 = np.array([[[1,9]]])
ar33[:,:1]=22
print(ar33) [[[22 2 3 1]
[ 1 4 5 6]
[ 1 7 8 9]]
[[22 1 2 3]
[ 1 4 5 6]
[ 1 7 8 9]]
[[22 1 2 3]
[ 1 4 5 6]
[ 1 7 8 9]]]
numpy数组的合并
-
-
-
# hstack()方法 # 使用该方法需要保证合并的两个数组行数相同,其中hstack的h表示horizontal水平的
import numpy as np
ar2 = np.array([[1.,4]])
ar3 = np.array([[1.,2],4]])
print(ar2)
print(ar3)
ar23 = np.hstack((ar2,ar3))
print(ar23) [[1. 2. 3.]
[2. 3. 4.]]
[[1. 2.]
[2. 4.]]
[[1. 2. 3. 1. 2.]
[2. 3. 4. 2. 4.]] # concatenate(要合并元组,axis=1) # axis=1表示合并两个数组的行,axis=0表示合并列,默认列
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2)
print(ar3)
ar23 = np.concatenate((ar2,ar3),axis=1)
print(ar23) [[1. 2. 3.]
[2. 3. 4.]]
[[1. 2. 3.]
[2. 4. 4.]]
[[1. 2. 3. 1. 2. 3.]
[2. 3. 4. 2. 4. 4.]] # vstack()方法,使用该方法数组中要有相同的列,v表示vetical垂直的
import numpy as np
ar2 = np.array([[1.,4]])
print(ar2)
print(ar3)
ar23 = np.vstark((ar2,ar3))
print(ar23) [[1. 2. 3.]
[2. 3. 4.]]
[[1. 2. 3.]
[2. 4. 4.]]
[[1. 2. 3.]
[2. 3. 4.]
[1. 2. 3.]
[2. 4. 4.]]
-
通过函数创建numpy数组
array() |
将列表转换为数组,可选择显式指定dtype |
arange() |
range的numpy版,支持浮点数 |
linspace() |
类似arange(),第三个参数为数组长度 |
zeros() |
根据指定形状和dtype创建全0数组 |
ones() |
根据指定形状和dtype创建全1数组 |
eye() |
创建单位矩阵 |
empty() |
创建一个元素全随机的数组 |
reshape() |
重塑形状 |
# arange()
print(np.arange(10)) # 构造从0到9的一维数组
print(np.arange(1,6)) # 构造从1到5的一维数组
print(np.arange(1,20,2)) # 构造1-19且步长为2的ndarray数组 [0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[ 1 3 5 7 9 11 13 15 17 19] # linspace/logspace # 等差/等比 # 等比默认以10为底数 输出默认float64
print(np.linspace(0,5)) # 构造一个等比数列,从0到20取5个数
print(np.logspace(0,5)) # 构造一个等差数列,从10**0到10**4取5个数 [ 0. 5. 10. 15. 20.]
[ 1. 10. 100. 1000.] # 构造3*4的全0numpy数组
print(np.zeros((3,4))) [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]] # 构造3*4的全1numpy数组
print(np.ones((3,4))) [[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]] # 构造3个主元的单位numpy数组
print(np.eye(3)) [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]] # 构造一个4*4的随机numpy数组,里面的元素是随机生成的
print(np.empty((4,4)))
[[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000]
[ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]] arr = np.ones([2,dtype=int)
print(arr.reshape(4,1)) # reshape 对行列数进行修改
-
数组运算
+ |
两个numpy数组对应元素相加 |
- |
两个numpy数组对应元素相减 |
* |
两个numpy数组对应元素相乘 |
/ |
两个numpy数组对应元素相除,如果都是整数则取商 |
% |
两个numpy数组对应元素相除后取余数 |
**n |
单个numpy数组每个元素都取n次方,如**2:每个元素都取平方 |
arrarr1 = np.array([[1,[3,4],[5,6]])
print(arr1) [[1 2]
[3 4]
[5 6]] arr2 = np.array([[7,8],[9,10],[11,12]])
print(arr2) [[ 7 8]
[ 9 10]
[11 12]] print(arr1 + arr2) [[ 8 10]
[12 14]
[16 18]]
print(arr1**2)
[[ 1 4]
[ 9 16]
[25 36]]
-
numpy数组运算函数
np.sin(arr) |
对numpy数组arr中每个元素取正弦,sin(x)sin(x) |
np.cos(arr) |
对numpy数组arr中每个元素取余弦,cos(x)cos(x) |
np.tan(arr) |
对numpy数组arr中每个元素取正切,tan(x)tan(x) |
np.arcsin(arr) |
对numpy数组arr中每个元素取反正弦,arcsin(x)arcsin(x) |
np.arccos(arr) |
对numpy数组arr中每个元素取反余弦,arccos(x)arccos(x) |
np.arctan(arr) |
对numpy数组arr中每个元素取反正切,arctan(x)arctan(x) |
np.exp(arr) |
对numpy数组arr中每个元素取指数函数,exex |
np.sqrt(arr) |
对numpy数组arr中每个元素开根号x??√ |
一元函数:abs,sqrt,exp,log,ceil,floor,rint,trunc,modf,isnan,isinf,cos,sin,tan 二元函数:add,substract,multiply,divide,power,mod,maximum,minimum
使用方法还有很多,现阶段不进行学习
matplotlib模块:画图
01条形图
from matplotlib import pyplot as plt # 约定俗成
from matplotlib.font_manager import FontProperties # 修改字体
font = FontProperties(fname='C:WindowsFontssimsun.ttc')
plt.style.use('ggplot') # 设置背景
clas = ['3班','4班','5班','6班']
students = [50,55,45,60]
clas_index = range(len(clas))
# [0,3] [50,60]
plt.bar(clas_index,students,color='darkblue')
plt.xlabel('学生',fontproperties=font)
plt.ylabel('学生人数',fontproperties=font)
plt.title('班级-学生人数',fontproperties=font,fontsize=20,fontweight=25)
plt.xticks(clas_index,clas,fontproperties=font)
plt.show()
02.直方图
import numpy as np
from matplotlib import pyplot as plt # 约定俗成
from matplotlib.font_manager import FontProperties # 修改字体
font = FontProperties(fname='C:WindowsFontssimsun.ttc')
plt.style.use('ggplot')
x1 = np.random.randn(10000)
x2 = np.random.randn(10000)
fig = plt.figure() # 生成一张画布
ax1 = fig.add_subplot(1,1) # 1行2列取第一个
ax2 = fig.add_subplot(1,2)
ax1.hist(x1,bins=50,color='darkblue')
ax2.hist(x2,color='y')
fig.suptitle('两个正太分布',fontsize=20)
ax1.set_title('x1的正太分布',fontproperties=font) # 加子标题
ax2.set_title('x2的正太分布',fontproperties=font)
plt.show()
03.折线图
import numpy as np
from matplotlib import pyplot as plt # 约定俗成
from matplotlib.font_manager import FontProperties # 修改字体
font = FontProperties(fname='C:WindowsFontssimsun.ttc')
plt.style.use('ggplot')
np.random.seed(10)
x1 = np.random.randn(40).cumsum()
x2 = np.random.randn(40).cumsum()
x3 = np.random.randn(40).cumsum()
x4 = np.random.randn(40).cumsum()
plt.plot(x1,c='r',linestyle='-',marker='o',label='红圆线')
plt.plot(x2,color='y',linestyle='--',marker='*',label='黄虚线')
plt.plot(x3,color='b',linestyle='-.',marker='s',label='蓝方线')
plt.plot(x4,color='black',linestyle=':',label='黑方线')
plt.legend(loc='best',prop=font) # 显示label
plt.show()
04.散点图+直线图
import numpy as np
from matplotlib import pyplot as plt # 约定俗成
from matplotlib.font_manager import FontProperties # 修改字体
font = FontProperties(fname='C:WindowsFontssimsun.ttc')
plt.style.use('ggplot')
fig = plt.figure()
ax1 = fig.add_subplot(1,1)
ax2 = fig.add_subplot(1,2)
x = np.arange(20)
y = x ** 2
x2 = np.arange(20)
y2 = x2
ax1.scatter(x,y,label='红')
ax1.scatter(x2,y2,c='b',label='蓝')
ax2.plot(x,y)
ax2.plot(x2,y2)
fig.suptitle('两张图',fontsize=15)
ax1.set_title('散点图',fontproperties=font)
ax2.set_title('折线图',fontproperties=font)
ax1.legend(prop=font)
plt.show()
# 以上只是基础中的基础
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|