連接具有多種資料類型的陣列
在處理不同類型的資料時,通常需要將它們組合成一個陣列。無需將整個數組轉換為單一資料類型即可有效率地完成此操作。
考慮以下場景:您有兩個數組,A 包含字串,B 包含整數。目標是建立一個組合數組combined_array,其中每列保留其原始資料類型。
使用np.concatenate 連接A 和B 時,會出現combined_array = np.concatenate((A, B), axis = 1)簡單來說,它默認將整個數組轉換為dtype=string,導致內存效率低下。
解決方案:記錄數組和結構化數組
有效的方法是利用記錄數組或結構化數組。
記錄陣列:
記錄陣列提供了一種在單一陣列中儲存多種資料類型的靈活方法。可以透過屬性存取各個欄位:
import numpy as np a = np.array(['a', 'b', 'c', 'd', 'e']) b = np.arange(5) records = np.rec.fromarrays((a, b), names=('keys', 'data')) print(records) # rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], # dtype=[('keys', '|S1'), ('data', '<i8')]) print(records['keys']) # rec.array(['a', 'b', 'c', 'd', 'e'], # dtype='|S1') print(records['data']) # array([0, 1, 2, 3, 4])
結構化陣列:
與記錄陣列類似,結構化陣列允許為每個欄位指定資料類型:
arr = np.array([('a', 0), ('b', 1)], dtype=([('keys', '|S1'), ('data', 'i8')])) print(arr) # array([('a', 0), ('b', 1)], # dtype=[('keys', '|S1'), ('data', '<i8')])
請注意,記錄數組提供屬性訪問,而結構化數組則不提供。
以上是如何連接不同資料類型的陣列並保持記憶體效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!