1. 程式人生 > >numpy 學習彙總10-dtype資料型別 ( 基礎學習 tcy)

numpy 學習彙總10-dtype資料型別 ( 基礎學習 tcy)

numpy.dtype                     建立:2018/6/21 修改:2018/11/20

    
===================================================================
1.class numpy.dtype(obj,[align = False,copy = False])#建立一個數據型別
    
引數:
    obj:#要轉換為資料型別的物件。
    align:bool,#將填充新增到欄位以匹配C編譯器為類似C結構輸出的內容。
    copy:布林,#True製作資料型別物件新副本。False只是對內建資料型別物件引用。
===================================================================
屬性:參考備註1
    
方法:
newbyteorder([new_order='S'])#用不同的位元組順序返回一個新的dtype。還在資料型別的所有欄位和子陣列中進行更改。
# 引數new_order:str忽略大小寫,可選 變換的位元組順序;
#     # 可以是以下任何一種:
#     'S' - 將dtype從當前轉換為相反  本機改相反
#     {'<','L'} - 小端  忽略
#     {'>','B'} - 大端
#     {'=','N'} - 本地訂單
#     {'|','I'} - 忽略(不改變位元組順序)
#
# 返回:new_dtype:dtype
    
# 例項1:
sys.byteorder                      # 'little'
dt.newbyteorder('S')            #dtype('<i4')
dt.newbyteorder('B')           #dtype('>i4') 
# 呼叫dtype的mro方桂即可檢視其所有的父類:
np.float64.mro()
#[numpy.float64,numpy.floating,numpy.inexact,numpy.number,numpy.generic,float,object]
===================================================================
# 例項2:
dt=np.dtype(np.int32)#標量
    
dt1=np.dtype('str,int,float')                                                                              #字串建立
dt2= np.dtype(np.str_,np.int32,np.float64)                                                        #逗號分隔
dt3=np.dtype([  ('name','U10'),('age','i'), ('weight','f')]  )                                     #list建立
dt4=np.dtype({'names':['name','age','weight'],'formats':['S10',np.int32,'f4']})#字典建立
    
dt   #dtype('int32')
dt1 #dtype([('f0', '<U'), ('f1', '<i4'), ('f2', '<f8')])
dt2 #dtype('<U')
dt3 #dtype([('name', '<U10'), ('age', '<i4'), ('weight', '<f4')])
dt4 #dtype([('name', 'S10'), ('age', '<i4'), ('weight', '<f4')])
    
a=np.array([('Tom', 21, 50),('John', 18, 75)], dtype=dt4)
    # array([('Tom', 21, 50.), ('John', 18, 75.)],dtype=[('name', '<U10'), ('age', '<i4'), ('weight', '<f4')])
==================================================================
# 例項3:
b=np.dtype([('hello',int,(2,3,4)),('world',np.void,10)])#void靈活型別,大小為10
# dtype([('hello', '<i4', (2, 3, 4)), ('world', 'V10')])
    
c=np.dtype('i4,(2,3)f8')# dtype([('f0', '<i4'), ('f1', '<f8', (2, 3))])
np.array([1,2],dtype=c)
    # array([(1, [[1., 1., 1.], [1., 1., 1.]]),(2, [[2., 2., 2.], [2., 2., 2.]])],dtype=[('f0', '<i4'), ('f1', '<f8', (2, 3))])
    
# 例項4:將int16細分為2個int8,稱為x和y。 0和1是以位元組為單位的偏移量:
np.dtype((np.int16,{'x':( np.int8,0),'y':( np.int8,1)}))#dtype((''i2',[('x','| i1'),('y','| i1')]))
    
# 例項5:以位元組為單位的偏移量,這裡是0和25:
np.dtype({'surname':('S25',0),'age':( np.uint8,25)})#dtype([('surname', 'S25'), ('age', 'u1')])
===================================================================
備註1:
例項-屬性 
import numpy as np
a=np.arange(24).reshape(2,3,4)
s=np.dtype({'names':['name','age','marks'],'formats':['S20',np.int32,'f4']})
a1=np.array([[('Tom11', 11, 110),('John12', 12, 120),('Mark13', 13, 130)],
[('Tom21', 21, 210),('John22', 22, 220),('Mark23', 23, 230)]], dtype=s)

b=a.dtype   #dtype('int32')
s                 #dtype([('name', 'S20'), ('age', '<i4'), ('marks', '<f4')])
                      
b.base#dtype('int32')
s.base#dtype([('name', 'S20'), ('age', '<i4'), ('marks', '<f4')])
b.byteorder#'='
s.byteorder#'|'
b.char#'l'
s.char#'V'
b.descr#[('', '<i4')]
b.descr#[('name', '|S20'), ('age', '<i4'), ('marks', '<f4')]
b.fields#
s.fields#mappingproxy({'name': (dtype('S20'), 0), 'age': (dtype('int32'), 20), 'marks': (dtype('float32'), 24)})
b.flags#0
s.flags#16
b.hasobject#False
s.hasobject#False
b.isalignedstruct#False
b.isalignedstruct#False
b.isbuiltin#1
b.isbuiltin#0
b.isnative#True
b.isnative#True
b.itemsize#4
s.itemsize#28
b.kind#'i'
s.kind#'V'
b.name#'int32'
s.name#'void224'
b.names#
s.names#('name', 'age', 'marks')
b.ndim#0
s.ndim#0
b.num#7
s.num#20
b.shape#()
s.shape#()
b.str#'<i4'
s.str#'|V28'
b.type#<class 'numpy.int32'>
s.type#<class 'numpy.void'>
b.subdtype#
s.subdtype#
===============================================================================
備註2:屬性列表 
型別 型別程式碼 說明 備註
base   基礎                                                              dtype('int32')
byteorder   指示此資料型別物件的位元組順序的字元              '='
char   21種不同內建型別中的每一種的唯一字元程式碼     'l'
descr   PEP3118介面描述了資料型別。                       [('', '<i4')]
fields   此資料型別定義命名欄位字典或無。                mappingproxy(,
      {'name': (dtype('S20'), 0)
flags   描述這種資料型別如何解釋的位標誌                0
hasobject   bool,指示此dtype是否包含任何欄位或子dtype中的引用計數物件 FALSE
isalignedstruct   布林值,指示dtype是否是維護欄位對齊的結構。                              FALSE
isbuiltin   整數指示這個dtype與內建dtypes的關係。                                          1
isnative   布林值,指示此dtype的位元組順序是否是平臺的本地順序。                 TRUE
Itemsize   此資料型別物件的元素大小                                                            4
kind   資料型別的字元程式碼('biufcmMOSUV')                                         'i'
name   資料型別名稱。                                                                            'int32'
names   欄位名稱列表,如果沒有欄位,則為無。                               ('name', 'age', 'marks')
ndim   則該子陣列的維數,否則為0。                                             0
num   21種不同內建型別中的每一種的唯一編號                             7
shape   則為子陣列的形狀元組,否則為()。                                ()
str   此資料型別物件的陣列協議型別字串。                             '<i4'
Type   用於例項化此資料型別的標量的型別物件                             <class 'numpy.int32'>
subdtype   元組(item_dtype,shape)如這個dtype描述一個子陣列則返回None