匯入numpy
import numpy as np #使用np來簡化輸入名稱
Numpy數據類型
- 每個python內建類型都有一個唯一定義它的字符代碼:
‘b’:布爾值
‘i’:符號整數
‘u’:無符號整數
‘f’:浮點
‘c’:複數浮點
‘m’:時間間隔
‘M’:日期時間
‘O’:Python 對象
‘S’, ‘a’:字節串
‘U’:Unicode
‘V’:原始數據(void)
第一個字符指定數據的類型,其餘字符指定每個項目的字節數,Unicode除外,其中它被解釋為字符數。項目大小必須對應於現有類型,否則將出現錯誤。
前綴<或>。<是小端(最小有效字節存儲在最小地址中)。>是大端(最大有效字節存儲在最小地址中)。
import numpy as np
a = np.dtype('<i2')
a1 = np.array([32766,32768],dtype=a)
b = np.dtype('>i2')
b1 = np.array([32766,32768],dtype=b)
print('i2內建數據類型:','\n<i2:',a,'\n>i2:',b,'\n32768超過i2大小->溢位:','\na1:',a1,'\nb1:',b1)
i2內建數據類型:
<i2: int16
>i2: >i2
32768超過i2大小->溢位:
a1: [ 32766 -32768]
b1: [ 32766 -32768]
-
NumPy 數字類型是dtype對象的實例:
-
自定義dtype數據類型:
- 方法一
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('student_ID', 'i4')])
Department_of_Chemistry_student = np.array([('jeff', 21, 50),('dora', 18, 75)], dtype = student)
print('學生結構:\n',student)
print('化學系學生的名子:\n',Department_of_Chemistry_student['name'],'\n化學系學生的年齡:\n',Department_of_Chemistry_student['age'])
print('索引0的學生資料:\n',Department_of_Chemistry_student[0])
學生結構:
[(‘name’, ‘S20’), (‘age’, ‘i1’), (‘student_ID’, ‘<i4’)]
化學系學生的名子:
[b’jeff’ b’dora’]
化學系學生的年齡:
[21 18]
索引0的學生資料:
(b’jeff’, 21, 50)
- 方法二
import numpy as np
new_student = np.dtype({
'names':['name','age','weight(kg)','height(cm)'],
'formats':['S30','i','f','f']}, align=True)
new_Department_of_Chemistry_student = np.array([('Zhang',32,72.5,167),
('Wang',24,65,170)],dtype=new_student)
print('學生結構:\n',new_student)
print('化學系學生的名子:\n',new_Department_of_Chemistry_student['name'],'\n化學系學生的年齡:\n',new_Department_of_Chemistry_student['age'])
學生結構:
{‘names’:[‘name’,‘age’,‘weight(kg)’,‘height(cm)’], ‘formats’:[‘S30’,’<i4’,’<f4’,’<f4’], ‘offsets’:[0,32,36,40], ‘itemsize’:44, ‘aligned’:True}
化學系學生的名子:
[b’Zhang’ b’Wang’]
化學系學生的年齡:
[32 24]offsets:
結構數據的byte偏移量,S以4byte為單位(30視為32),‘i4’=32bit=4byte,‘f4’=32bit=4byte
itemsize:
結構數據的總大小(byte)
aligned:數據是否對齊
- NumPy字節(byte順序)交換
numpy.ndarray.byteswap()函數在兩個表示之間切換:bigendian(大端)和little-endian(小端)。
import numpy as np
a = np.array([1, 256, 8755], dtype = np.int16)
print('數組:\n',a)
print('十六進制表示記憶體中的資料:')
print(np.array([hex(a[j])for j in range(3)]))
print('\n數組(調用byteswap()函數後):')
print(a.byteswap(True))
print('十六進制表示記憶體中的資料:')
print(np.array([hex(a