在c語言中,我們可以使用關鍵字struct定義結構型別。和c語言一樣,numpy也可以建立結構定義,這樣可以很方便的讀取二進位制的c語言結構陣列,將其轉換為numpy陣列物件,假設我們定義的結構陣列如下(c語言描述):
struct person;
我們在python中可以自定義型別如下:
>>> persontype = np.dtype(,align = true)>>> a = np.array([('liming',24,63.9),('mike',15,67.),('jan',34,45.8)],dtype = persontype)
>>> a
array([('liming', 24, 63.900001525878906), ('mike', 15, 67.0),
('jan', 34, 45.79999923706055)],
dtype={'names':['name','age','weight'], 'formats':['s30','首先建立了dtype物件persontype,它的結構型別是乙個藐視各字段的字典,該字典有兩個鍵:『names』和'format'.每個鍵對應的值是乙個列表,『names』定義結構體中每個欄位的名稱,'formats』定義每個欄位的資料型別。我們使用的型別如下:
『s30』:表示長度為30的字串型別,由於結構體中每個元素的大小固定,所以需要指定長度。
『i』:32位的整數型別,相當於np.int32
'f':32位單精度浮點數,相當於np.float32
然後通過np.array()建立陣列,通過dtype指定元素型別為persontype
還可以使用包含該多個元組的列表來描述資料型別,刑如:(欄位名,資料型別)
>> persontype = np.dtype([('name','|s30'),('age','>> a = np.array([('liming',24,63.9),('mike',15,67.),('jan',34,45.8)],dtype = persontype)>>> a
array([('liming', 24l, 63.9), ('mike', 15l, 67.0), ('jan', 34l, 45.8)],
dtype=[('name', 's30'), ('age', '|:忽略位元組順序
<:低位位元組在前
>:高位位元組在前
結構體陣列的取值方式和一般陣列差不多,可以通過下標取得元素:
>>> a[0]
('liming', 24l, 63.9)
>>> a[0:-1]
array([('liming', 24l, 63.9), ('mike', 15l, 67.0)],
dtype=[('name', 's30'), ('age', '我們可以使用欄位名作為下標獲取對於的值
>>> a['name']
array(['liming', 'mike', 'jan'],
dtype='|s30')
>>> a['age']
array([24, 15, 34], dtype=int64)
>>> a['weight']
array([ 63.9, 67. , 45.8])
可以通過 a.tostring()或者a.tofile()方法可以將陣列a以二進位制方式寫成字串或者寫入檔案
numpy中的陣列切片
如同python中自帶的切片,numpy中也有類似的切片功能。接下來對兩個功能進行一下簡單的對比。首先測試python自帶的功能,在shell視窗中測試如下 in 1 data range 10 in 2 data out 2 0,1,2,3,4,5,6,7,8,9 in 3 data1 data ...
Numpy 中陣列的分割
來自 python資料分析基礎教程 numpy 學習指南 第2版 下面要介紹的陣列分割方法有 0.建立乙個陣列 a arange 9 reshape 3,3 print a 1.水平分割 下面的 將把陣列沿著水平方向分割為3個相同大小的子陣列 b hsplit a,3 print b 或者呼叫spl...
Python中numpy陣列切片
python中符合切片並且常用的有 列表,字串,元組。下面那列表來說明,其他的也是一樣的。格式 開頭 結束 步長 開頭 當步長 0時,不寫預設0。當步長 0時,不寫預設 1 結束 當步長 0時,不寫預設列表長度加一。當步長 0時,不寫預設負的列表長度減一 步長 預設1,0 是從左往右走,0是從右往左...