Py程序与基础教程 5_第1页
Py程序与基础教程 5_第2页
Py程序与基础教程 5_第3页
Py程序与基础教程 5_第4页
Py程序与基础教程 5_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch14数值日期和时间处理本章要点:14.1相关模块概述14.2cmath模块和复数数学函数14.3数值运算模块NumPy14.4日期和时间处理14.5综合应用举例资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。

案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。电子资源:扫描封底的“补充资源”二维码,在公众号“书圈”中下载,习题参考答案、教学大纲、教学案例、思政刚要和案例分析,以及Python计算生态等补充知识。

题库自测平台:扫描封底刮刮卡中的二维码,登录网站(),进入本书“题库”页面,选择相应章节练习数值处理的相关模块1.Python标准库中包括下列数值处理相关模块。numbers模块:数值抽象类。包含类Complex、Real、Rational、Integral。math模块:数学函数。cmath模块:复数运算数学函数。decimal模块:高精度数值运算。fractions模块:分数运算模块。random模块:随机数模块。2.数值运算模块NumPy。Python扩展模块NumPy提供了更高效的数值处理功能。NumPy模块主要提供数组和矩阵处理功能,还包括高级功能,如傅立叶变换等。NumPy的官网地址为“http://”。3.科学计算模块SciPy。Python扩展模块SciPy提供了用于科学计算的功能。SciPy模块包括统计、优化、整合、线性代数、傅里叶变换、信号和图像处理、常微分方程求解器等功能。SciPy的官网地址为“”日期和时间处理的相关模块Python标准库的datetime模块包含各种用于日期和时间处理的类calendar模块包含用于处理日历的函数和类time模块包含用于处理时间的函数cmath模块和复数数学函数Python标准模块cmath中提供了许多用于复数运算的函数cmath模块包含的常量和函数,其API如表14-1(1)~(6)所示……cmath模块中函数的参数可以为整数、浮点数、复数,或其它可以自动转换为复数或浮点数的对象,即具有__complex__()或__float__()方法的对象cmath模块包含的常量和函数(1)表14-1(1)cmath的常量和函数(一):常量名称说明示例结果e数学常量ee2.718281828459045pi数学常量pipi3.141592653589793表14-1(2)cmath的常量和函数(二):转换函数(笛卡儿坐标和极坐标)名称说明示例结果phase(x)返回math.atan2(x.imag,x.real)phase(complex(-1.0,0.0))3.141592653589793polar(x)返回(abs(x),phase(x)),即(r,phi)polar(3+4j)(5.0,0.9272952180016122)rect(r,phi)返回(r,phi)对应的复数,即r*(cos(phi)+sin(phi)*1j)rect(1,pi/4)(0.7071067811865476+0.7071067811865476j)cmath模块包含的常量和函数(2)表14-1(3)cmath的常量和函数(三):幂和对数运算名称说明示例结果exp(x)返回e**xexp(3+4j)(-13.128783081462158-15.200784463067954j)log10(x)返回log10xlog10(3+4j)(0.6989700043360187+0.4027191962733731j)sqrt(x)返回x的平方根sqrt(3+4j)(2+1j)表14-1(4)cmath的常量和函数(四):三角函数名称说明示例结果acos(x)返回x的反余弦acos(3+4j)(0.9368124611557198-2.305509031243477j)asin(x)返回x的反正弦asin(3+4j)(0.6339838656391766+2.305509031243477j)atan(x)返回x的反正切atan(3+4j)(1.4483069952314644+0.15899719167999918j)cos(x)返回x的余弦cos(2*pi)(1+0j)sin(x)返回x的正弦sin(pi/2)(1+0j)tan(x)返回x的正切tan(pi/4)(0.9999999999999999+0j)cmath模块包含的常量和函数(3)表14-1(5)cmath的常量和函数(五):双曲线函数表14-1(6)cmath的常量和函数(六):判别函数名称说明示例结果acosh(x)返回x的双曲线反余弦acosh(1)0jasinh(x)返回x的双曲线反正弦asinh(1)(0.8813735870195429+0j)atanh(x)返回x的双曲线反正切atanh(0.1)(0.10033534773107558+0j)cosh(x)返回x的双曲线余弦cosh(1)(1.5430806348152437+0j)sinh(x)返回x的双曲线正弦sinh(0.1)(0.10016675001984403+0j)tanh(x)返回x的双曲线正切tanh(0.1)(0.09966799462495582+0j)名称说明示例结果isfinite(x)判断x.real和x.imag是否都为有限值isfinite(3+4j)Trueisinf(x)判断x.real和x.imag是否其一为无穷大isinf(3+4j)Falseisnan(x)判断x.real和x.imag是否其一为非数值isnan(3+4j)False数值运算模块NumPyNumPy库是Python的数值计算扩展,用于高效存储和处理数组和矩阵,许多科学计算库(包括matplotlib、pandas、SciPy和SymPy等)都基于NumPy。NumPy是Python数值计算的基石,它提供了两种基本的对象——ndarray(N-dimensionalarrayobject,N维数组对象,即数组)和ufunc(universalfunctionobject,通用函数对象)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的通用函数数值运算模块的基本使用Python的列表可以用作数组,但由于列表的元素可以是任何对象,故列表中所保存的是对象的指针,对于数值运算会浪费内存和CPU计算时间。而Python标准库array不支持多维数值,也不支持数值运算函数,同样不适合数值计算Python扩展模块NumPy提供数组和矩阵处理功能(类似于MATLAB),提供了更高效的数值处理功能使用NumPy模块一般遵循如下几个步骤(1)安装NumPy模块。具体步骤请参见本教程第1章相关内容。(2)使用importnumpy语句导入NumPy模块。(3)创建数组。(4)处理数组。创建数组(1)【例14.1】通过array函数创建数组示例>>>importnumpyasnp>>>a=np.array([1,2,3])

#一维数组>>>b=np.array([[1,2,3],[4,5,6],[7,8,9]])#二维数组>>>a

array([1,2,3])>>>barray([[1,2,3],[4,5,6],[7,8,9]])创建数组(2)【例14.2】通过arange、linspace和logspace函数创建数组示例>>>a=np.arange(0,10,2)>>>a

array([0,2,4,6,8])>>>b=np.linspace(0,2*np.pi,10)>>>barray([0.,0.6981317,1.3962634,2.0943951,2.7925268,3.4906585,4.1887902,4.88692191,5.58505361,6.28318531])>>>c=np.logspace(0,2,10)>>>carray([1.,1.66810054,2.7825594,4.64158883,7.74263683,12.91549665,21.5443469,35.93813664,59.94842503,100.])处理数组数组元素的存取方法和Python列表的存取方法相同数组也支持常用的运算符操作,例如:+、-、*、/等NumPy内置许多针对数组的每个元素分别进行操作的函数,这些函数称之为universalfunction,一般基于C语言级别实现,因此其计算速度非常快【例14.3】数组处理示例>>>importnumpyasnp>>>x=np.linspace(0,2*np.pi,10)>>>y=np.sin(x)>>>yarray([0.00000000e+00,6.42787610e-01,9.84807753e-01,8.66025404e-01,3.42020143e-01,-3.42020143e-01,-8.66025404e-01,-9.84807753e-01,-6.42787610e-01,-2.44929360e-16])>>>y+1array([1.,1.64278761,1.98480775,1.8660254,1.34202014,0.65797986,0.1339746,0.01519225,0.35721239,1.])数组应用举例使用模块NumPy中的函数可以实现数值处理;结合Matplotlib中的绘图函数可以很方便地输出各种处理结果【例14.4】数组应用示例(funcfig.py):利用NumPy模块中的函数和Matplotlib中的绘图函数绘制y=x2和y=2x的图形importnumpyasnp #导入模块importmatplotlib.pyplotasplt #导入模块importmath #导入模块x=np.linspace(0,10,100) #x轴坐标值y1=np.power(x,2) #y1=x**2y2=np.exp2(x) #y2=2**xplt.plot(x,y1,x,y2) #绘制图形plt.show() #显示图形日期和时间处理概述datetime模块:日期和时间类calendar模块:日历函数和类time模块:时间函数相关术语epoch(新纪元):系统规定的时间起始点UTC(CoordinatedUniversalTime):协调世界时DST(DaylightSavingTime):夏令时time模块中的daylight属性用于判定是否使用夏令时。>>>time.daylight#输出:0epoch(新纪元)epoch(新纪元)是系统规定的时间起始点。Unix系统于1970/1/10:0:0开始。日期和时间在内部表示为从epoch开始的秒数。time模块中的函数使用对应C语言函数库中的函数,故只能处理1970/1/1至2038/12/31之间的日期和时间。使用time模块的gmtime()函数可以获取当前系统的起始点。例如:>>>importtime;time.gmtime(0)time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=1,tm_isdst=0)时间对象time模块的struct_time对象是一个命名元组,用于表示时间对象,包括9个字段属性,即tm_year、tm_mon、tm_mday、tm_hour、tm_min、tm_sec、tm_wday、tm_yday和tm_isdst在time模块中主要包含localtime(将时间秒数转换为本地时间)、gmtime(将时间秒数转换为本地时间,无时区变换,是UTC时间)、time(将时间转换为浮点数)、gmtime(0)(获取当前系统的起始点)、mktime(localtime()的反函数,将本地时间转换为秒数)、sleep(暂停线程执行,睡眠指定的秒数)、ascitime(将时间元组转换为时间字符串)、ctime(将秒表示的时间转换为本地时间字符串)、strftime(将struct_time对象格式化为字符串)和strptime(时间字符串解析为struct_time对象)等函数>>>st=time.gmtime()>>>st.tm_year#输出:2024time模块time模块包含如下用于测量程序性能的函数。process_time():返回当前进程处理器运行时间。perf_counter():返回性能计数器。monotonic():返回单向时钟。用户可以使用程序运行到某两处的时间差值,计算该程序片段所花费的运行时间,也可以使用time.time()函数,该函数返回以秒为单位的系统时间(浮点数)【例14.5】测量程序运行时间(time_pmrunning.py)importtimedeftest():sum=0foriinrange(0,9999999):sum+=ireturnsumif__name__=='__main__':t1=time.monotonic()#单向时钟print(test())t2=time.monotonic()#单向时钟print('运行时间:',t2-t1)datetime模块(1)datetime模块包括datetime.MINYEAR和datetime.MAXYEAR两个常量,分别表示最小年份和最大年份,值为1和9999。datetime模块包含用于表示日期的date对象、表示时间的time对象以及表示日期和时间的datetime对象。timedelta对象表示日期或时间之间的差值,可以用于日期或时间的运算【例14.6】日期对象示例获取当前日期时间通过datetime模块的date.today()函数可以返回表示当前日期的date对象,通过其实例对象方法,可以获取其年、月、日等信息通过datetime模块的datetime.now()函数可以返回表示当前日期时间的datetime对象,通过其实例对象方法,可以获取其年、月、日、时、分、秒等信息>>>importdatetime>>>datetime.date.today()#当前日期datetime.date(2018,7,9)>>>datetime.datetime.now()#当前日期时间datetime.datetime(2018,7,9,21,17,3,983307)【例14.7】获取当前日期时间示例(datetimes.py)importdatetimed=datetime.date.today()dt=datetime.datetime.now()print("当前的日期是%s"%d)print("当前的日期和时间是%s"%dt)print("ISO格式的日期和时间是%s"%dt.isoformat())print("当前的年份是%s"%dt.year)print("当前的月份是%s"%dt.month)print("当前的日期是%s"%dt.day)print("dd/mm/yyyy格式是%s/%s/%s"%(dt.day,dt.month,dt.year))print("当前小时是%s"%dt.hour)print("当前分钟是%s"%dt.minute)print("当前秒是%s"%dt.second)日期时间格式化为字符串time模块中的strftime()函数将struct_time对象格式化为字符串【例14.8】日期时间格式化为字符串示例1【例14.9】日期时间格式化为字符串示例2>>>fromtimeimport*>>>strftime("%c",localtime())#输出:'SunJan2318:48:072022'>>>strftime("%Y年%m月%d日(%A)%H时%M分%S秒",localtime())'2022年01月23日(Sunday)18时48分07秒'>>>importdatetime>>>datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')'2022-01-2318:49:18'日期时间字符串解析为日期时间对象time模块中的strptime()函数将时间字符串解析为struct_time对象【例14.10】日期时间字符串解析示例1【例14.11】日期时间字符串解析示例2>>>fromtimeimport*>>>strptime("30Nov00","%d%b%y")time.struct_time(tm_year=2022,tm_mon=11,tm_mday=30,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=3,tm_yday=335,tm_isdst=-1)>>>datetime.datetime.strptime(‘2022-08-18','%Y-%m-%d')datetime.datetime(2022,8,18,0,0)综合举例:程序运行时间测量当程序的复杂度增加(例如,循环次数增大)时,程序运行的时间显著增加。通过time模块中的time()函数可以测量程序运行的时间【例14.12】程序运行时间测量(timing.py)importtimedeftiming(f,data):"""测量函数调用f(data)的运行时间分析"""start=time.time()#记录开始时间f(data)#运行f(data)end=time.time()#记录结束时间returnend-start#返回执行时间#测试代码if__name__=="__main__":importpi#参见14.7.2节foriinrange(3):n=10000*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论