numpy資料型別
說明
參考檔案地址:https://github.com/datawhalechina/team-learning-program/tree/master/IntroductionToNumpy
之前都是用到那查那裡,這次較為系統的學習,在此記錄整理。
numpy資料型別
- 基本資料型別
python原生的資料型別較少,為了加以區分 numpy 在這些型別名稱末尾都加了“_”
型別 | 備註 | 說明 |
---|---|---|
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 | 表示兩個時間之間的間隔 |
-
注意事項
-
Python 的浮點數通常是64位浮點數,幾乎等同於 np.float64
-
Python 的int 是靈活的,整數可以擴充套件以容納任何整數並且不會溢位 ;numpy存在溢位風險。
numpy各整數型別的範圍展示如下:import numpy as np
ii16 = np.iinfo(np.int16)
print(ii16.min) # -32768
print(ii16.max) # 32767
ii32 = np.iinfo(np.int32)
print(ii32.min) # -2147483648
print(ii32.max) # 2147483647numpy浮點型的範圍展示如下:
ff16 = np.finfo(np.float16)
print(ff16.bits) # 16
print(ff16.min) # -65500.0
print(ff16.max) # 65500.0
print(ff16.eps) # 0.000977
ff32 = np.finfo(np.float32)
print(ff32.bits) # 32
print(ff32.min) # -3.4028235e+38
print(ff32.max) # 3.4028235e+38
print(ff32.eps) # 1.1920929e-07
-
-
特殊常量
- numpy.nan 空值
注:兩個numpy.nan是不相等的 - numpy.inf 無窮大
- numpy.pi 圓周率
- numpy.e 自然常數
- numpy.nan 空值
時間和日期
- 基礎
在 numpy 中,我們很方便的將字串轉換成時間日期型別 datetime64(datetime 已被 python 包含的日期時間庫所佔用)。datatime64是帶單位的日期時間型別,其單位如下:
日期單位 | 程式碼含義 | 時間單位 | 程式碼含義 |
---|---|---|---|
Y | 年 | h | 小時 |
M | 月 | m | 分鐘 |
W | 周 | s | 秒 |
D | 天 | ms | 毫秒 |
us | 微秒 | ||
ns | 納秒 | ||
ps | 皮秒 | ||
fs | 飛秒 | ||
as | 阿託秒 |
- 從字串建立 datetime64 型別時,預設情況下,numpy 會根據字串自動選擇對應的單位
import numpy as np
a = np.datetime64(‘2020-03-01’)
print(a, a.dtype) # 2020-03-01 datetime64[D]
a = np.datetime64(‘2020-03’)
print(a, a.dtype) # 2020-03 datetime64[M]
a = np.datetime64(‘2020-03-08 20:00:05’)
print(a, a.dtype) # 2020-03-08T20:00:05 datetime64[s]
a = np.datetime64(‘2020-03-08 20:00’)
print(a, a.dtype) # 2020-03-08T20:00 datetime64[m]
a = np.datetime64(‘2020-03-08 20’)
print(a, a.dtype) # 2020-03-08T20 datetime64[h]
- 從字串建立 datetime64 型別時,可以強制指定使用的單位。
a = np.datetime64(‘2020-03’, ‘D’)
print(a, a.dtype) # 2020-03-01 datetime64[D]
print(np.datetime64(‘2020-03’) == np.datetime64(‘2020-03-01’)) # True
print(np.datetime64(‘2020-03’) == np.datetime64(‘2020-03-02’)) #False
- 從字串建立 datetime64 陣列時,如果單位不統一,則一律轉化成其中最小的單位
a = np.array([‘2020-03’, ‘2020-03-08’, ‘2020-03-08 20:00’], dtype=‘datetime64’)
print(a, a.dtype)# [‘2020-03-01T00:00’ ‘2020-03-08T00:00’ ‘2020-03-08T20:00’] datetime64[m]
- 使用arange()建立 datetime64 陣列,用於生成日期範圍
a = np.arange(‘2020-08-01’, ‘2020-08-10’, dtype=np.datetime64)
print(a)
# [‘2020-08-01’ ‘2020-08-02’ ‘2020-08-03’ ‘2020-08-04’ ‘2020-08-05’
# ‘2020-08-06’ ‘2020-08-07’ ‘2020-08-08’ ‘2020-08-09’]
print(a.dtype) # datetime64[D]
a = np.arange(‘2020-08-01 20:00’, ‘2020-08-10’, dtype=np.datetime64)
print(a)
# [‘2020-08-01T20:00’ ‘2020-08-01T20:01’ ‘2020-08-01T20:02’ …
# ‘2020-08-09T23:57’ ‘2020-08-09T23:58’ ‘2020-08-09T23:59’]
print(a.dtype)
# datetime64[m]
-
datetime64 和 timedelta64 運算
- timedelta64 表示兩個 datetime64 之間的差。timedelta64 也是帶單位的,並且和相減運算中的兩個 datetime64 中的較小的單位保持一致.
a = np.datetime64(‘2020-03-08’) - np.datetime64(‘2020-03-07’)
b = np.datetime64(‘2020-03-08’) - np.datetime64(‘202-03-07 08:00’)
c = np.datetime64(‘2020-03-08’) - np.datetime64(‘2020-03-07 23:00’, ‘D’)
print(a, a.dtype) # 1 days timedelta64[D]
print(b, b.dtype) # 956178240 minutes timedelta64[m]
print(c, c.dtype) # 1 days timedelta64[D]
a = np.datetime64(‘2020-03’) + np.timedelta64(20, ‘D’)
b = np.datetime64(‘2020-06-15 00:00’) + np.timedelta64(12, ‘h’)
print(a, a.dtype) # 2020-03-21 datetime64[D]
print(b, b.dtype) # 2020-06-15T12:00 datetime64[m]- 注:生成 timedelta64時,要注意年(‘Y’)和月(‘M’)這兩個單位無法和其它單位進行運算(一年有幾天?一個月有幾個小時?這些都是不確定的)
a = np.timedelta64(1, ‘Y’)
print(np.timedelta64(a, ‘D’))
# TypeError: Cannot cast NumPy timedelta64 scalar from metadata [Y] to [D] according to the rule ‘same_kind’-
timedelta64 間的運算
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 -
numpy.datetime64 與 datetime.datetime 相互轉換
import numpy as np
import datetime
dt = datetime.datetime(year=2020, month=6, day=1, hour=20, minute=5, second=30)
dt64 = np.datetime64(dt, ‘s’)
print(dt64, dt64.dtype)
# 2020-06-01T20:05:30 datetime64[s]
dt2 = dt64.astype(datetime.datetime)
print(dt2, type(dt2))
# 2020-06-01 20:05:30 <class ‘datetime.datetime’>
-
numpy.busday_offset ——— 工作日功能
numpy.busday_offset(dates, offsets, roll=‘raise’, weekmask=‘1111100’, holidays=None, busdaycal=None, out=None)
First adjusts the date to fall on a valid day according to the roll rule, then applies offsets to the given dates counted in valid days.
引數roll:{‘raise’, ‘nat’, ‘forward’, ‘following’, ‘backward’, ‘preceding’, ‘modifiedfollowing’, ‘modifiedpreceding’}
‘raise’ means to raise an exception for an invalid day.
‘nat’ means to return a NaT (not-a-time) for an invalid day.
‘forward’ and ‘following’ mean to take the first valid day later in time.
‘backward’ and ‘preceding’ mean to take the first valid day earlier in time.將指定的偏移量應用於工作日,單位天(‘D’)。計算下一個工作日,如果當前日期為非工作日,預設報錯。可以指定 forward 或 backward 規則來避免報錯。
a = np.busday_offset(‘2020-07-11’, offsets=1)
print(a)
# ValueError: Non-business day date in busday_offset
a = np.busday_offset(‘2020-07-11’, offsets=0, roll=‘forward’)
b = np.busday_offset(‘2020-07-11’, offsets=0, roll=‘backward’)
print(a) # 2020-07-13
print(b) # 2020-07-10可以指定偏移量為 0 來獲取當前日期向前或向後最近的工作日,當然,如果當前日期本身就是工作日,則直接返回當前日期
-
np.is_busday —— 判斷指定日期是否是工作日
b = np.is_busday(‘2020-07-11’)
print(b) # False擴充:
- np.count_nonzero(np.is_busday(a)) —— 統計一個 datetime64[D] 陣列中的工作日天數
- 自定義周掩碼值,即指定一週中哪些星期是工作日。
b = np.is_busday(‘2020-07-10’, weekmask=[1, 1, 1, 1, 0, 0, 1])
print(b) # False
-
np.busday_count —— 返回兩個日期之間的工作日數量
begindates = np.datetime64(‘2020-07-10’)
enddates = np.datetime64(‘2020-07-20’)
a = np.busday_count(begindates, enddates)
print(a) # 6
相關文章
- NumPy 資料型別資料型別
- NumPy之:資料型別資料型別
- NumPy之:資料型別物件dtype資料型別物件
- 什麼是NumPy?Python中NumPy資料型別有哪些?Python資料型別
- NumPy 超詳細教程(2):資料型別資料型別
- NumPy 陣列切片及資料型別介紹陣列資料型別
- Numpy學習-Task01-資料型別&陣列建立資料型別陣列
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 區別值型別資料和引用型別資料型別
- 資料型別,型別轉換資料型別
- 資料型別資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- 基本資料型別與字串型別資料型別字串
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- Java中的基本資料型別與引用資料型別Java資料型別
- JavaScript - 資料型別JavaScript資料型別
- Symbol資料型別Symbol資料型別
- 資料型別2資料型別
- JavaScript 資料型別JavaScript資料型別
- js資料型別JS資料型別
- TypeScript資料型別TypeScript資料型別
- Oracle 資料型別Oracle資料型別
- SQL 資料型別SQL資料型別
- php資料型別PHP資料型別
- JavaScript資料型別JavaScript資料型別
- 一、資料型別資料型別
- [Mysql]資料型別MySql資料型別
- MySQL資料型別MySql資料型別
- go 資料型別Go資料型別
- 基本資料型別資料型別
- Python資料型別Python資料型別
- Java資料型別Java資料型別
- MYSQL 資料型別MySQL 資料型別
- Sqlite—資料型別SQLite資料型別
- Redis資料型別Redis資料型別
- 1.2 資料型別資料型別