datetime64 類型,你會用嗎?又如何在 numpy 中定義一個結構化數據類型呢? ...
系列文章地址
文章目錄
NumPy 數據類型1、NumPy 中的數據類型補充:複數的概念2、datetime64 的使用Ⅰ、簡單示例Ⅱ、單位使用Ⅲ、配合 arange 函數使用Ⅳ、Datetime64 和 Timedelta64 運算Ⅴ、Timedelta64 單獨的運算Ⅵ、numpy.datetime64 與 datetime.datetime 相互轉換Ⅶ、工作日功能(busday)3、數據類型對象:dtypeⅠ、實例化 dtype 對象Ⅱ、字元代碼4、numpy.datetime_data5、numpy.datetime_as_string
NumPy 數據類型
1、NumPy 中的數據類型
NumPy 支持比 Python 更多種類的數值類型,下表所列的數據類型都是 NumPy 內置的數據類型,為了區別於 Python 原生的數據類型,bool
、int
、float
、complex
、str
等類型名稱末尾都加了 _
。
print(numpy.dtype)
所顯示的都是 NumPy 中的數據類型,而非 Python原生數據類型。
類型名稱 | 描述 |
---|---|
bool_ | 布爾類型 |
unicode_ / unicode / str_ / str0(零非字母O) | Unicode 字元串 |
int8 / byte | |
int16 / short | |
int32 / intc / int_ / long | |
int64 / longlong / intp / int0(零非字母O) | |
uint8 / ubyte | |
uint16 / ushort | |
uint32 / uintc | |
uint64 / ulonglong / uintp / uint0(零非字母O) | |
float16 / half | 半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位 |
float32 / single | 單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位 |
float64 / float_ / double | 雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位 |
complex64 / singlecomplex | 複數,表示雙 32 位浮點數(實數部分和虛數部分) |
complex128 / complex_ / cfloat / cdouble / longcomplex / clongfloat / clongdouble |
複數,表示雙 64 位浮點數(實數部分和虛數部分) |
datetime64 | NumPy 1.7 開始支持的日期時間類型 |
timedelta64 | 表示兩個時間之間的間隔 |
這裡有點不理解,我是 win7 64 位系統,上述的類型都是我實測得到的,但是,我查看源碼,裡面卻是如下定義的。總之,為了安全起見,還是建議用 int32、int64 等無歧義的類型。
int_ = long
intp = long
int64 = long
int0 = long
class long(signedinteger):
""" 64-bit integer. Character code 'l'. Python int compatible. """
pass
補充:複數的概念
我們把形如 z=a+bi(a, b均為實數)的數稱為複數,其中 a 稱為實部,b 稱為虛部,i 稱為虛數單位。
當虛部 b=0 時,複數 z 是實數;
當虛部 b!=0 時,複數 z 是虛數;
當虛部 b!=0,且實部 a=0 時,複數 z 是純虛數。
2、datetime64 的使用
Ⅰ、簡單示例
例一:
import numpy as np
a = np.datetime64('2019-03-01')
print(a)
輸出:
2019-03-01
例二:
import numpy as np
a = np.datetime64('2019-03')
print(a)
輸出:
2019-03
看到沒有,可以僅顯示到“月”,是不是很贊?
Ⅱ、單位使用
datetime64 可以指定使用的單位,單位包括年('Y'),月('M'),周('W')和天('D'),而時間單位是小時('h'),分鐘('m') ),秒('s'),毫秒('ms'),微秒('us'),納秒('ns'),皮秒('ps'),飛秒('fs'),阿托秒('as')。
例三:
周('W')是一個比較奇怪的單位,如果是周四,則顯示當前,如果不是,則顯示上一個周四。後來我想,大概是因為 1970-01-01 是周四。
import numpy as np
a = np.datetime64('2019-03-07', 'W')
b = np.datetime64('2019-03-08', 'W')
print(a, b)
輸出:(2019-03-07 是周四)
2019-03-07 2019-03-07
例四:
從字元串創建 datetime64 類型時,預設情況下,NumPy 會根據字元串自動選擇對應的單位。
import numpy as np
a = np.datetime64('2019-03-08 20:00')
print(a.dtype)
輸出:
datetime64[m]
例五:
也可以強制指定使用的單位。
import numpy as np
a = np.datetime64('2019-03', 'D')
print(a)
輸出:
2019-03-01
例六:
由上例可以看出,2019-03
和 2019-03-01
所表示的其實是同一個時間。
事實上,如果兩個 datetime64 對象具有不同的單位,它們可能仍然代表相同的時刻。並且從較大的單位(如月份)轉換為較小的單位(如天數)是安全的。
import numpy as np
print(np.datetime64('2019-03') == np.datetime64('2019-03-01'))
輸出:
True
例七:
從字元串創建日期時間數組時,如果單位不統一,則一律轉化成其中最小的單位。
import numpy as np
a = np.array(['2019-03', '2019-03-08', '2019-03-08 20:00'], dtype='datetime64')
print(a)
print(a.dtype)
輸出:
['2019-03-01T00:00' '2019-03-08T00:00' '2019-03-08T20:00']
datetime64[m]
Ⅲ、配合 arange 函數使用
例八:一個月的所有天數
import numpy as np
a = np.arange('2019-02', '2019-03', dtype='datetime64[D]')
print(a)
輸出:
['2019-02-01' '2019-02-02' '2019-02-03' '2019-02-04' '2019-02-05'
'2019-02-06' '2019-02-07' '2019-02-08' '2019-02-09' '2019-02-10'
'2019-02-11' '2019-02-12' '2019-02-13' '2019-02-14' '2019-02-15'
'2019-02-16' '2019-02-17' '2019-02-18' '2019-02-19' '2019-02-20'
'2019-02-21' '2019-02-22' '2019-02-23' '2019-02-24' '2019-02-25'
'2019-02-26' '2019-02-27' '2019-02-28']
例九:
間隔也可以是 3 天('3D')這種形式哦。