NumPy學習筆記:3、更加復雜的數組
阿新 • • 發佈:2017-07-19
ssi ram 有符號 -c .sh [0 tab sin pes
一、更多的數據類型
1、Casting
(1) 在混合數據類型的運算中,最終運算結果的數據類型與size更大的數據類型相同。
>>> np.array([1, 2, 3]) + 1.5
array([ 2.5, 3.5, 4.5])
(2) 給數組中的元素賦值,並不能改變整個數組的數據類型。(若把整型數組中的某個元素賦值為浮點型數據,則這個浮點型數據會被截斷為整型)
>>> a = np.array([1, 2, 3]) >>> a.dtype dtype(‘int64‘) >>> a[0] = 1.9 #<-- float is truncated to integer >>> a array([1, 2, 3])
(3) 強制類型轉換
>>> a = np.array([1.7, 1.2, 1.6]) >>> b = a.astype(int) # <-- truncates to integer >>> b array([1, 1, 1])
(4) 四舍五入,但並不改變數組的數據類型
>>> a = np.array([1.2, 1.5, 1.6, 2.5, 3.5, 4.5])>>> b = np.around(a) >>> b # still floating-point array([ 1., 2., 2., 2., 4., 4.]) >>> c = np.around(a).astype(int) >>> c array([1, 2, 2, 2, 4, 4])
2、Different data type sizes - 不同數據類型的大小
有符號整型 | int8 | 8 bits |
int16 | 16 bits | |
int32 | 32 bits(32位平臺上 int 型默認大小) | |
int64 | 64 bits(64位平臺上 int 型默認大小) | |
無符號整型 | uint8 | 8 bits |
uint16 | 16 bits | |
uint32 | 32 bits | |
uint64 | 64 bits | |
浮點型 | float16 | 16 bits |
float32 | 32 bits | |
float64 | 64 bits(float 默認大小) | |
float96 | 96 bits, platform-dependent(與 np.longdouble 相同) | |
float128 | 128 bits, platform-dependent(與 np.longdouble 相同) | |
復數浮點型 | complex64 | two 32-bit floats |
complex128 | two 64-bit floats | |
complex192 | two 96-bit floats, platform-dependent | |
complex256 | two 128-bit floats, platform-dependent |
二、結構化數據類型
sensor_code | (4-character string) |
position |
(float) |
value |
(float) |
>>> samples = np.zeros((6,), dtype=[(‘sensor_code‘, ‘S4‘), ... (‘position‘, float), (‘value‘, float)]) >>> samples.ndim 1 >>> samples.shape (6,) >>> samples.dtype.names (‘sensor_code‘, ‘position‘, ‘value‘) >>> samples[:] = [(‘ALFA‘, 1, 0.37), (‘BETA‘, 1, 0.11), (‘TAU‘, 1, 0.13), ... (‘ALFA‘, 1.5, 0.37), (‘ALFA‘, 3, 0.11), (‘TAU‘, 1.2, 0.13)] >>> samples array([(‘ALFA‘, 1.0, 0.37), (‘BETA‘, 1.0, 0.11), (‘TAU‘, 1.0, 0.13), (‘ALFA‘, 1.5, 0.37), (‘ALFA‘, 3.0, 0.11), (‘TAU‘, 1.2, 0.13)], dtype=[(‘sensor_code‘, ‘S4‘), (‘position‘, ‘<f8‘), (‘value‘, ‘<f8‘)]) # 使用列名進行索引 >>> samples[‘sensor_code‘] array([‘ALFA‘, ‘BETA‘, ‘TAU‘, ‘ALFA‘, ‘ALFA‘, ‘TAU‘], dtype=‘|S4‘) >>> samples[‘value‘] array([ 0.37, 0.11, 0.13, 0.37, 0.11, 0.13]) >>> samples[0] (‘ALFA‘, 1.0, 0.37) >>> samples[0][‘sensor_code‘] = ‘TAU‘ >>> samples[0] (‘TAU‘, 1.0, 0.37) # 同時獲取多列 >>> samples[[‘position‘, ‘value‘]] array([(1.0, 0.37), (1.0, 0.11), (1.0, 0.13), (1.5, 0.37), (3.0, 0.11), (1.2, 0.13)], dtype=[(‘position‘, ‘<f8‘), (‘value‘, ‘<f8‘)]) # 花式索引同樣適用 >>> samples[samples[‘sensor_code‘] == ‘ALFA‘] array([(‘ALFA‘, 1.5, 0.37), (‘ALFA‘, 3.0, 0.11)], dtype=[(‘sensor_code‘, ‘S4‘), (‘position‘, ‘<f8‘), (‘value‘, ‘<f8‘)])
更多信息請參考:https://docs.scipy.org/doc/numpy/user/basics.rec.html
https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#specifying-and-constructing-data-types
三、maskedarray: dealing with (propagation of) missing data - 蒙面數組:缺失值的處理
對於浮點型數據來說,我們可以使用NaN來處理缺失值,但是面具可以處理任何類型的數據的缺失值。
>>> x = np.ma.array([1, 2, 3, 4], mask=[0, 1, 0, 1]) >>> x masked_array(data = [1 -- 3 --], mask = [False True False True], fill_value = 999999) >>> y = np.ma.array([1, 2, 3, 4], mask=[0, 1, 1, 1]) # 0代表False,表示沒有面具,也就是不會被當作不可用的數據 >>> y masked_array(data = [1 -- -- --], mask = [False True True True], fill_value = 999999) >>> x + y masked_array(data = [2 -- -- --], mask = [False True True True], fill_value = 999999)
NumPy學習筆記:3、更加復雜的數組