NumPy 結(jié)構(gòu)化數(shù)組

2021-09-01 10:27 更新

介紹

結(jié)構(gòu)化數(shù)組是 ndarrays,其數(shù)據(jù)類型是組織為命名字段序列的更簡(jiǎn)單數(shù)據(jù)類型的組合。例如,

>>> x = np.array([('Rex', 9, 81.0), ('Fido', 3, 27.0)],
...              dtype=[('name', 'U10'), ('age', 'i4'), ('weight', 'f4')])
>>> x
array([('Rex', 9, 81.), ('Fido', 3, 27.)],
      dtype=[('name', 'U10'), ('age', '<i4'), ('weight', '<f4')])

x是一個(gè)長(zhǎng)度為 2 的一維數(shù)組,其數(shù)據(jù)類型是具有三個(gè)字段的結(jié)構(gòu):1. 長(zhǎng)度為 10 或更少的名為“name”的字符串,2. 名為“age”的 32 位整數(shù),以及 3. a 32 -位浮點(diǎn)數(shù)名為“重量”。

如果x在位置 1 處建立索引,則會(huì)得到一個(gè)結(jié)構(gòu):

>>> x[1]
('Fido', 3, 27.0)

您可以通過使用字段名稱進(jìn)行索引來訪問和修改結(jié)構(gòu)化數(shù)組的各個(gè)字段:

>>> x['age']
array([9, 3], dtype=int32)
>>> x['age'] = 5
>>> x
array([('Rex', 5, 81.), ('Fido', 5, 27.)],
      dtype=[('name', 'U10'), ('age', '<i4'), ('weight', '<f4')])

結(jié)構(gòu)化數(shù)據(jù)類型旨在能夠模仿 C 語言中的“結(jié)構(gòu)”,并共享類似的內(nèi)存布局。它們用于與 C 代碼接口和結(jié)構(gòu)化緩沖區(qū)的低級(jí)操作,例如用于解釋二進(jìn)制 blob。出于這些目的,它們支持特殊功能,例如子數(shù)組、嵌套數(shù)據(jù)類型和聯(lián)合,并允許控制結(jié)構(gòu)的內(nèi)存布局。 希望操作表格數(shù)據(jù)(例如存儲(chǔ)在 csv 文件中)的用戶可能會(huì)發(fā)現(xiàn)其他 pydata 項(xiàng)目更合適,例如 xarray、pandas 或 DataArray。這些為表格數(shù)據(jù)分析提供了高級(jí)界面,并且針對(duì)該用途進(jìn)行了更好的優(yōu)化。例如,相比之下,numpy 中結(jié)構(gòu)化數(shù)組的類似 C 結(jié)構(gòu)的內(nèi)存布局會(huì)導(dǎo)致緩存行為不佳。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)