《深度学习入门——基于python的理论与实现》读书笔记(一)

numpy.array的使用

numpy库引入

import numpy as np

创建numpy数组

  自定义的数组名 = np.array(任何有数组性质的对象)

例如, 

    x = np.array((1.0, True, 4, 'Hello World'))

但是要注意,numpy数组中只能存在一种类型的元素。在jupyter notebook中运行上述代码,将产生结果:

array(['1.0', 'True', '4', 'Hello World'], dtype='

可见,元素都被转换成了字符串类型。

用嵌套列表生成矩阵,即元素是np.ndarray的ndarray:

A = np.array([[1, 2], [3, 4]])

A.shape和A.dtype是上述矩阵的两个属性,分别存储了该矩阵的形状和数据类型的信息。

特殊情况

将集合、字典、单元素传入np.array()很可能会事与愿违。例如,传入集合,假设我们期待的结果是集合中的元素按遍历顺序加入np.array中:

np.array({i for i in range(5)}) # 使用了python特性,列表推导

会产生结果:

array({0, 1, 2, 3, 4}, dtype=object)

这是一个单元素数组,元素类型为object。

补救的办法是,先将集合中的元素放入列表中,再用列表构建numpy数组:

np.array(list({i for i in range(5)}))

这次的结果是:

array([0, 1, 2, 3, 4])

将字典、单元素传入np.array()也会产生类似的结果,即生成一个只有一个object类型的元素的numpy数组。

numpy数组的计算

两个同样大小的矩阵之间的加减乘除都是对应元素之间的加减乘除。

广播

示意图:

《深度学习入门——基于python的理论与实现》读书笔记(一)_第1张图片

需要注意的是,矩阵乘以向量时,要使广播顺利进行,向量的长度必须和矩阵行向量的长度相等。向量的长度和矩阵的列向量的长度相等时,广播并不能顺利进行。比如,下面的代码:

def arrayBroadcastExpriment():
    A = np.array([[1, 1, 1], [1, 1, 1]])
    print(A)
    b = np.array((2, 2))
    print(b)
    print(A * b)

 将产生错误。错误提示为:

ValueError: operands could not be broadcast together with shapes (2,3) (2,)

元素访问

按元素下标

和C语言数组类似,下标从0开始。

按下标组

例如,

    X = np.array([i for i in range(-3, 4)])
    print("X =", X)
    M = [i for i in range(0, 7, 2)]
    Y = X[M]
    print("Y =", Y)

将输出,

X = [-3 -2 -1  0  1  2  3]
Y = [-3 -1  1  3]

其中,M = [0, 2, 4, 6],即Y中的元素分别取自X的0, 2, 4, 6号元素。

按布尔数组

例如,

    X = np.array([i for i in range(-3, 4)])
    print(X)
    Y = X > 0
    print(Y)    
    print(X[Y])

输出,

[-3 -2 -1  0  1  2  3]
[False False False False  True  True  True]
[1 2 3]

Matplotlib

二维曲线绘制

非常清晰的画图功能,

import numpy as np
import matplotlib.pyplot as plt

def sinDraw():
    x = np.arange(0, 6, .1)
    y1 = np.sin(x)
    y2 = np.cos(x)

    plt.plot(x, y1, label='sin')
    plt.plot(x, y2, linestyle='--', label='cos')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('sin & cos')
    plt.legend()
    plt.show()


if __name__ == '__main__':
    sinDraw()

结果如下,

《深度学习入门——基于python的理论与实现》读书笔记(一)_第2张图片

很标准,很漂亮的曲线。 

载入图片

显示一张保存在本地磁盘D中的图片,

import matplotlib.pyplot as plt
from matplotlib.image import imread

if __name__ == '__main__':
    img = imread('D:\\img.png')
    plt.imshow(img)
    plt.show()

结果,

《深度学习入门——基于python的理论与实现》读书笔记(一)_第3张图片

小结

 简单地介绍了numpy, matplotlib的使用。

你可能感兴趣的:(机器学习)