机器学习笔记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()

效果图:

原文地址:https://www.cnblogs.com/luckyplj/p/12638002.html