![Python深度学习:基于TensorFlow(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/658/48593658/b_48593658.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.5 通用函数
前文提到,NumPy提供了两种基本的对象,即ndarray和ufunc对象。前面我们介绍了ndarray,本节将介绍ufunc。ufunc是一种能对数组的每个元素进行操作的函数,许多ufunc函数都是用C语言实现的,因此计算速度非常快。此外,它们比math模块中的函数更灵活。math模块中函数的输入一般是标量,但NumPy中函数的输入可以是向量或矩阵,而利用向量或矩阵可以避免使用循环语句,这点在机器学习、深度学习中非常重要。表1-4为几个NumPy中常用的通用函数。
表1-4 几个NumPy中常用的通用函数
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/33_04.jpg?sign=1739312189-vohOeI2ajS3Ui103adk7gyI2IKdlHCAf-0-c36d54255af2c3322968fa61ffeb877a)
说明 sum函数中涉及一个有关轴的参数(即axis),该参数的具体含义可参考图1-9。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/34_01.jpg?sign=1739312189-jPyzMsv0yrT8unP50Kzs1AhkzbQKkdbR-0-a5e7d17b18e05bbb229d2a42b7bc4d5d)
图1-9 可视化参数axis的具体含义
1)math与numpy中函数的性能比较:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/34_02.jpg?sign=1739312189-Cb8PL0eYSuAUBTJZ9LJeXXZbVf6wu3fe-0-333ba9cbb5c0cd7fd7d45f240ab520d3)
打印结果如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/34_03.jpg?sign=1739312189-KFVjxRxD0c0xVNScXHCFySLZvtlZB8nc-0-faf55c1c97abdb38639a752afc7ae3ef)
由此可见,numpy.sin比math.sin快近10倍。
2)循环与向量运算的比较。充分使用Python的numpy库中的内置函数,实现计算的向量化,可大大提高运行速度。numpy库中的内置函数使用SIMD指令实现向量化,这要比使用循环的速度快得多。如果使用GPU,其性能将更强大,不过NumPy不支持GPU。
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/34_04.jpg?sign=1739312189-hxcH2B8tCjTtscg98EuSWEflcK9EQ6FF-0-ba71964a09cca6312ee7b2ae979efafc)
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/35_01.jpg?sign=1739312189-kSd2KtxUBlu3aHE5a4z2eJ6OfRk8RFk7-0-dde8c5f9400b2f9ab63d4d6c1d10e0b5)
输出结果如下:
![](https://epubservercos.yuewen.com/AE244A/28235093307371206/epubprivate/OEBPS/Images/35_02.jpg?sign=1739312189-TU91gyZ9P3bUR2SBiJVl2jL35wdjWENm-0-430938f46aa7f3630f3216aa87c69b9e)
从运行结果上来看,使用for循环的运行时间大约是使用向量运算的400倍。因此,在深度学习算法中,我们一般使用向量化矩阵运算。