当前位置 : 主页 > 编程语言 > python >

day 18

来源:互联网 收集:自由互联 发布时间:2021-06-25
01.numpy模块 https://www.cnblogs.com/nickchen121/p/10807564.html numpy模块简介 numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的

01.numpy模块

https://www.cnblogs.com/nickchen121/p/10807564.html

  1. numpy模块简介

    numpy是python的一种开源数值计算扩展库。这种库可以用来存储和处理大型numpy数组,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)

  2. numpy库的两个作用

    1. 提供了数组间的操作、运算、统计分布和简单的数学模型
    2. 计算速度快,甚至要优于python内置的简单运算,使其成为pandas、sklearn等模块以来的包。高级的框架如TensorFlow、PyTorch等。其数组操作也和numpy非常相似
  3. numpy的用法

    1. 创建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.,2,3],[2,3,4]]) # 创建二维的ndarray对象
      print(ar2,ar2.dtype,type(ar2))
      ar3 = np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]]) # 创建三维的ndarray对象
      print(ar3,'\n','维数:',ar3.ndim)
      ar33 = np.array([[[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]]])  # 创建三维的ndarray对象
      print(ar33,'\n','维数:',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
    2. numpy数组的常用属性

      属性 解释 T 数组的转置(对高维数组而言) dtype 数组元素的数据类型 size 数组元素的个数 ndim 数组的维数 shape 数组的维度大小(以元组形式) astype 类型转换

      dtype种类:bool_, int(8,16,32,64), float(16,32,64)

      用法

      # T
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      print(ar2,'\n',ar2.T)
      [[1. 2. 3.]
       [2. 3. 4.]] 
       [[1. 2.]
       [2. 3.]
       [3. 4.]]
      # dtype
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      print(ar2.dtpye) # flaot64
      # size
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      print(ar2.size)  # 6
      # ndim
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      print(ar2.ndim)  # 2
      # shape 获取数组的维度大小,以元组的形式存储 # 可以用来获取数组的行列数
      import numpy as np
      arr = np.array([1.,2.,3.])
      print('arr:',arr.shape)
      ar2 = np.array([[1.,2,3],[2,3,4]])
      print('ar2:',ar2.shape)
      ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
      print('ar3:',ar33.shape)
      arr: (3,)
      ar2: (2, 3)
      ar3: (3, 3, 4)
      # astype # 数组数据类型转换
      # dtype种类:bool_, int(8,16,32,64), float(16,32,64)
      import numpy as np
      arr = np.array([1,2,3])
      arr.astype(np.float32)
      print(arr)  # [1 2 3]
    3. 切割numpy数组

      # numpy数组的切分与列表的切分方法相同
      import numpy as np
      ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
      print(ar33[:,:1,:1]) # []中有几个参数看numpy数组是几维,然后以 层->行->列 的顺序输入 不填默认所有
      [[[1]]
      
       [[1]]
      
       [[1]]]
      # 通过条件筛选数值 or 判断数值
      import numpy as np
      ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,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]]]
    4. numpy数组的元素替换

      # 相当于列表的索引替换值
      import numpy as np
      ar33 = np.array([[[1,2,3,1],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]],[[1,1,2,3],[1,4,5,6],[1,7,8,9]]])
      ar33[:,:1,: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]]]
    5. numpy数组的合并

    6. # hstack()方法 # 使用该方法需要保证合并的两个数组行数相同,其中hstack的h表示horizontal水平的
      import numpy as np
      ar2 = np.array([[1.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2],[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.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2,3],[2,4,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.,2,3],[2,3,4]])
      ar3 = np.array([[1.,2,3],[2,4,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.]]
    7. 通过函数创建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,20,5)) # 构造一个等比数列,从0到20取5个数
      print(np.logspace(0,4,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,2],dtype=int)
      print(arr.reshape(4,1)) # reshape 对行列数进行修改
    8. 数组运算

      运算符 说明 + 两个numpy数组对应元素相加 - 两个numpy数组对应元素相减 * 两个numpy数组对应元素相乘 / 两个numpy数组对应元素相除,如果都是整数则取商 % 两个numpy数组对应元素相除后取余数 **n 单个numpy数组每个元素都取n次方,如**2:每个元素都取平方
      arrarr1 = np.array([[1, 2], [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]]
    9. numpy数组运算函数

      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

  4. 使用方法还有很多,现阶段不进行学习

matplotlib模块:画图

01条形图

from matplotlib import pyplot as plt  # 约定俗成
from matplotlib.font_manager import FontProperties  # 修改字体

font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')

plt.style.use('ggplot')  # 设置背景

clas = ['3班', '4班', '5班', '6班']
students = [50, 55, 45, 60]
clas_index = range(len(clas))

# [0,1,2,3] [50,55,45,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:\Windows\Fonts\simsun.ttc')

plt.style.use('ggplot')

x1 = np.random.randn(10000)

x2 = np.random.randn(10000)

fig = plt.figure()  # 生成一张画布
ax1 = fig.add_subplot(1, 2, 1)  # 1行2列取第一个
ax2 = fig.add_subplot(1, 2, 2)

ax1.hist(x1, bins=50,color='darkblue')
ax2.hist(x2, bins=50,color='y')

fig.suptitle('两个正太分布',fontproperties=font,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:\Windows\Fonts\simsun.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=':', marker='s', 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:\Windows\Fonts\simsun.ttc')

plt.style.use('ggplot')

fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)

x = np.arange(20)
y = x ** 2

x2 = np.arange(20)
y2 = x2

ax1.scatter(x, y, c='r', label='红')
ax1.scatter(x2, y2, c='b', label='蓝')

ax2.plot(x, y)
ax2.plot(x2, y2)

fig.suptitle('两张图', fontproperties=font, fontsize=15)
ax1.set_title('散点图', fontproperties=font)
ax2.set_title('折线图', fontproperties=font)
ax1.legend(prop=font)
plt.show()

# 以上只是基础中的基础
网友评论