• 机器学习笔记05-----python基础01


    1.python库

    2.利用python可以绘制各种图像

    3.numpy和scipy的使用案例

    (1)利用numpy做数据生成

     # # 开场白:
        # numpy是非常好用的数据包,如:可以这样得到这个二维数组
        # [[ 0  1  2  3  4  5]
        #  [10 11 12 13 14 15]
        #  [20 21 22 23 24 25]
        #  [30 31 32 33 34 35]
        #  [40 41 42 43 44 45]
        #  [50 51 52 53 54 55]]
        a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6)
        print(a)

    运行结果:

    代码分析:

    Numpy 中 arange() 主要是用于生成数组,具体用法如下;

    numpy.arange(start, stop, step, dtype = None)

    在给定间隔内返回均匀间隔的值。

    值在半开区间 [开始,停止]内生成(换句话说,包括开始但不包括停止的区间),返回的是 ndarray 。

    使用案例:

    from numpy import *  # 引入numpy
    
    A = arange(5)  # 只有结束项
    print(A)  # 结果 [0 1 2 3 4] 结果不包含结束项
    print(type(A))  # 结果 <class 'numpy.ndarray'>
    
    A = arange(1, 5)  # 起点为1,步长默认为1
    print(A)  # 结果 [1 2 3 4]
    
    A = arange(1, 5, 2)  # 步长默认为2
    print(A)  # 结果 [1 3]
    
    A = arange(1, 5.2, 0.6)  # 浮点数参数,结果就不一定完全符合了
    print(A)  # 结果 [1.  1.6 2.2 2.8 3.4 4.  4.6 5.2]

    reshape函数是numpy中一个很常用的函数,作用是在不改变矩阵的数值的前提下修改矩阵的形状。

    import numpy as np
    x=np.array([[1,2],[3,4]])
    y=np.reshape(x,(1,4))
    print(x)
    print(y)

    效果图:

    缺省值-1代表我不知道要给行(或者列)设置为几,reshape函数会根据原矩阵的形状自动调整。

    import numpy as np
    x=np.array([[1,2],[3,4]])
    y=np.reshape(x,(4,-1))
    print(x)
    print(y)

    (2)创建一个数组

    标准Python的列表(list)中,元素本质是对象。
    如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费内存和CPU。
    因此,Numpy提供了ndarray(N-dimensional array object)对象:存储单一数据类型的多维数组

    <1>创建一维数组

     # # 1.使用array创建
        # 通过array函数传递list对象
        L = [1, 2, 3, 4, 5, 6]
        print("L = ", L)
        a = np.array(L)
        print("a = ", a)
        print(type(a))

    运行结果:

    <2>创建多维数组

     # # # 若传递的是多层嵌套的list,将创建多维数组
        b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
        print(b)
        # # # # 数组大小可以通过其shape属性获得
        print(b.shape)

    运行结果:

    <3>改变数组的形状

    # # # 也可以强制修改shape
        b.shape = 4, 3
        print(b)
        # # # # 注:从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的

    运行结果:

    <4>缺省值-1代表我不知道要给行(或者列)设置为几,shape函数会根据原矩阵的形状自动调整。

    # # # 当某个轴为-1时,将根据数组元素的个数自动计算此轴的长度
        b.shape = 2, -1
        print(b)
        print(b.shape)

    运行结果:

    <5>使用reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变

    c = b.reshape((4, -1))
        print("b = 
    ", b)
        print('c = 
    ', c)

    运行结果:

    (3)使用函数创建数组

    如果生成一定规则的数据,可以使用NumPy提供的专门函数

    <1>arange函数
    arange函数类似于python的range函数:指定起始值、终止值和步长来创建数组
    和Python的range类似,arange同样不包括终值;但arange可以生成浮点类型,而range只能是整数类型

    a = np.arange(1, 10, 0.5)
    print(a)

    运行结果:

    <2>linspace函数

    # # # linspace函数通过指定起始值、终止值和元素个数来创建数组,缺省包括终止值
        b = np.linspace(1, 10, 10)
        print('b = ', b)
        # # #
        # # 可以通过endpoint关键字指定是否包括终值
        c = np.linspace(1, 10, 10, endpoint=False)
        print('c = ', c)

    运行结果:

    <3>logspace函数

    logspace可以创建等比数列

    # # 和linspace类似,logspace可以创建等比数列
        # # 下面函数创建起始值为10^1,终止值为10^2,有10个数的等比数列
        d = np.logspace(1, 2, 10, endpoint=True)
        print(d)

    运行结果:

    (4)数组元素的存取方法

    <1>常规方法

     # 3.1常规办法:数组元素的存取方法和Python的标准方法相同
        a = np.arange(10)
        print(a)
        # # # 获取某个元素
        print(a[3])
        # # # # 切片[3,6),左闭右开
        print(a[3:6])
        # # # # 省略开始下标,表示从0开始
        print(a[:5])
        # # # # 下标为负表示从后向前数
        print(a[3:])
        # # # # 步长为2
        print(a[1:9:2])
        # # # # 步长为-1,即翻转
        print(a[::-1])
        # # # # 切片数据是原数组的一个视图,与原数组共享内容空间,可以直接修改元素值
        a[1:4] = 10, 20, 30
        print(a)
        # # # # 因此,在实践中,切实注意原始数据是否被破坏,如:
        b = a[2:5]
        b[0] = 200
        print(a)

    运行结果:

    <2>整数/布尔数组存取

    实例1:

     # 根据整数数组存取:当使用整数序列对数组元素进行存取时,
        # 将使用整数序列中的每个元素作为下标,整数序列可以是列表(list)或者数组(ndarray)。
        # 使用整数序列作为下标获得的数组不和原始数组共享数据空间
        a = np.logspace(0, 9, 10, base=2)
        print(a)
        i = np.arange(0, 10, 2)
        print(i)
        # # # # 利用i取a中的元素
        b = a[i]
        print(b)
        # # # b的元素更改,a中元素不受影响
        b[2] = 1.6
        print(b)
        print(a)

    运行结果:

    实例2:

    # 使用布尔数组i作为下标存取数组a中的元素:返回数组a中所有在数组b中对应下标为True的元素
        # # 生成10个满足[0,1)中均匀分布的随机数
        a = np.random.rand(10)
        print(a)
        # # # 大于0.5的元素索引
        print(a > 0.5)
        # # # # 大于0.5的元素
        b = a[a > 0.5]
        print('b=',b)
        # # # # 将原数组中大于0.5的元素截取成0.5
        a[a > 0.5] = 0.5
        print(a)
        # # # # b不受影响
        print(b)

    运行结果:

    <3>二维数组获取

     # [[ 0  1  2  3  4  5]
        #  [10 11 12 13 14 15]
        #  [20 21 22 23 24 25]
        #  [30 31 32 33 34 35]
        #  [40 41 42 43 44 45]
        #  [50 51 52 53 54 55]]
        a = np.arange(0, 60, 10)    # 行向量
        print('a = ', a)
        b = a.reshape((-1, 1))      # 转换成列向量
        print(b)
        c = np.arange(6)
        print(c)
        f = b + c   # 行 + 列
        print(f)
        # # 合并上述代码:
        a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6)
        print(a)

    运行结果:

    <4>二维数组切片

    a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6)
        print(a)
        # # 二维数组的切片
        print(a[(0, 1, 2, 3), (2, 3, 4, 5)])
        print(a[3:, [0, 2, 5]])
        i = np.array([True, False, True, False, False, True])
        print(a[i])
        print(a[i, 3])

    运行结果:

    (5)绘图

    # 5.1 绘制正态分布概率密度函数
        matplotlib.rcParams['font.sans-serif'] = [u'SimHei']  #FangSong/黑体 FangSong/KaiTi
        matplotlib.rcParams['axes.unicode_minus'] = False
        mu = 0
        sigma = 1
        x = np.linspace(mu - 3 * sigma, mu + 3 * sigma, 50)
        y = np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma)
        print(x.shape)
        print('x = 
    ', x)
        print(y.shape)
        print('y = 
    ', y)
        # plt.plot(x, y, 'ro-', linewidth=2)
        plt.plot(x, y, 'r-', x, y, 'go', linewidth=2, markersize=8)
        plt.grid(True)
        plt.title("高斯分布")
        plt.show()

    效果图:

  • 相关阅读:
    《梦断代码》读书计划
    四则运算3
    《梦断代码》读后感Ⅱ
    第二次结对开发
    首次结对开发
    四则运算2的测试
    四则运算2的任务完成时间表
    四则运算2
    《梦断代码》观后感1
    四则运算2的心路历程
  • 原文地址:https://www.cnblogs.com/luckyplj/p/12638002.html
Copyright © 2020-2023  润新知