目录
前言
安装
导入
数据类型及数组创建
1.常量
np.nan
np.inf
np.pi
np.e
更新
2.数据类型
时间日期和时间增量
datetime64的应用
工作日(busday)
前言
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库n为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或 Matlab 等所做的任务。
安装
一般anaconda自带,不然就pip
#pip安装 pip install numpy
导入
import numpy as np
数据类型及数组创建
1.常量
np.nan
1.常量
np.nan
两个np.nan是不相等的。
print(np.nan==np.nan) #false #例子 import numpy as np x = np.array([1,2,np.nan,4]) y = np.isnan(x) print(y) #[false,false,true,false]
np.inf
正无穷大,这个常数在优化带有约束条件的函数时可能会能得到,一般用于数学场景。
np.pi
圆周率
np.e
自然常数e,用于数学计算,但是我还没用过。
更新
2.数据类型
| 类型 | 备注 | 说明 |
|---|---|---|
| bool_ = bool8 | 8位 | 布尔类型 |
| int8 = byte | 8位 | 整型 |
| int16 = short | 16位 | 整型 |
| int32 = intc | 32位 | 整型 |
| int_ = int64 = long = int0 = intp | 64位 | 整型 |
| uint8 = ubyte | 8位 | 无符号整型 |
| uint16 = ushort | 16位 | 无符号整型 |
| uint32 = uintc | 32位 | 无符号整型 |
| uint64 = uintp = uint0 = uint | 64位 | 无符号整型 |
| float16 = half | 16位 | 浮点型 |
| float32 = single | 32位 | 浮点型 |
| float_ = float64 = double | 64位 | 浮点型 |
| str_ = unicode_ = str0 = unicode | |Unicode 字符串 | |
| datetime64 | |日期时间类型 | |
| timedelta64 | |表示两个时间之间的间隔 |
时间日期和时间增量
使用arange()创建 datetime64 数组,用于生成日期范围。
import numpy as np
t = np.arange('2022-04-25', '2022-04-27', dtype=np.datetime64)
print(a)
print(a.dtype) # datetime64[D]
t = np.arange('2022-04-25 20:00', '2022-04-27', dtype=np.datetime64)
print(a)
']
print(a.dtype) # datetime64[m]
t = np.arange('2022-04', '2022-12', dtype=np.datetime64)
print(a)
print(a.dtype) # datetime64[M]
下面时间增量偷了一段代码:
timedelta64 的运算,不用过多解释。
import numpy as np a = np.timedelta64(1, 'Y') b = np.timedelta64(6, 'M') c = np.timedelta64(1, 'W') d = np.timedelta64(1, 'D') e = np.timedelta64(10, 'D') print(a) # 1 years print(b) # 6 months print(a + b) # 18 months print(a - b) # 6 months print(2 * a) # 2 years print(a / b) # 2.0 print(c / d) # 7.0 print(c % e) # 7 days
datetime64的应用
工作日(busday)
【Python 库】NumPy 超详细教程(2):数据类型 - 丹枫无迹 - 博客园
从这篇博客中借鉴了一些可以看看,但是不如读源码。
源码和源码中的例子:
offsets这个参数指的是第一个参数dates的偏移量,0就是dates后第一个工作日或者你定义的日期,-1就是上一个,以此类推。
从weekmask这个参数可以看到:工作日是 7 个布尔标志定义的,你也可以'1111111'一周都是工作日。
如果当前日期为非工作日,默认报错。可以用roll参数指定 forward 或 backward 规则来避免报错。(一个是向前取第一个有效的工作日,一个是向后取第一个有效的工作日)
busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None)
Examples
--------
>>> # First business day in October 2011 (not accounting for holidays)
... np.busday_offset('2011-10', 0, roll='forward')
numpy.datetime64('2011-10-03')
>>> # Last business day in February 2012 (not accounting for holidays)
... np.busday_offset('2012-03', -1, roll='forward')
numpy.datetime64('2012-02-29')
>>> # Third Wednesday in January 2011
... np.busday_offset('2011-01', 2, roll='forward', weekmask='Wed')
numpy.datetime64('2011-01-19')
>>> # 2012 Mother's Day in Canada and the U.S.
... np.busday_offset('2012-05', 1, roll='forward', weekmask='Sun')
numpy.datetime64('2012-05-13')
>>> # First business day on or after a date
... np.busday_offset('2011-03-20', 0, roll='forward')
numpy.datetime64('2011-03-21')
>>> np.busday_offset('2011-03-22', 0, roll='forward')
numpy.datetime64('2011-03-22')
>>> # First business day after a date
... np.busday_offset('2011-03-20', 1, roll='backward')
numpy.datetime64('2011-03-21')
>>> np.busday_offset('2011-03-22', 1, roll='backward')
numpy.datetime64('2011-03-23')
以下两段都是不知从何处偷来的代码。
返回指定日期是否是工作日。
import numpy as np
# 2020-07-10 星期五
a = np.is_busday('2020-07-10')
b = np.is_busday('2020-07-11')
print(a) # True
print(b) # False
返回两个日期之间的工作日数量。
import numpy as np
# 2020-07-10 星期五
begindates = np.datetime64('2020-07-10')
enddates = np.datetime64('2020-07-20')
a = np.busday_count(begindates, enddates)
b = np.busday_count(enddates, begindates)
print(a) # 6
print(b) # -6


