numpy中結構陣列

2022-05-12 22:25:19 字數 1677 閱讀 6825

在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是從右往左...