簡體   English   中英

ndarray是否比recarray訪問更快?

[英]is ndarray faster than recarray access?

我能夠將我的recarray數據復制到ndarray,進行一些計算並返回具有更新值的ndarray。

然后,我在numpy.lib.recfunctions發現了append_fields()功能,並認為將2個字段追加到原始RecArray中以保存我的計算值會更聰明。

當我這樣做時,我發現操作要慢得多。 我不必花時間,與基於Recarray的一分鍾+相比,基於ndarray的過程要花費幾秒鍾,並且我的測試數組很小,小於10,000行。

這是典型的嗎? ndarray訪問比recarray快得多? 我期望由於按字段名稱進行訪問而導致性能下降,但不是那么多。

更新於2018年11月15日
我擴展了時序測試,以弄清ndarray,結構化數組,recarray和masked數組(記錄數組的類型?)的性能差異。 每個都有細微的差異。 請參閱此處的討論:
numpy的-討論:結構陣列-recarrays和記錄陣列

這是我的性能測試的結果。 我建立了一個非常簡單的示例(使用我的HDF5數據集之一)來比較性能與存儲在4種類型的數組中的相同數據:ndarray,結構化數組,recarray和masked數組。 構造數組后,將它們傳遞給一個函數,該函數僅循環遍歷每一行並從每一行提取12個值。 通過一次傳遞( timeit = 1)從timeit函數中調用這些函數。 此測試僅測量數組讀取功能,並避免所有其他計算。
以下給出9,000行的結果:

for ndarray: 0.034137165047070615
for structured array: 0.1306827116913577
for recarray: 0.446010040784266
for masked array: 31.33269560998199

根據此測試,每種類型的訪問性能都會下降。 結構化數組和Recarray的訪問時間比ndarray的訪問時間慢4到13倍(但都只有幾分之一秒)。 但是,ndarray訪問比屏蔽數組訪問快1000倍。 這就解釋了我在完整示例中看到的秒到分鍾的差異。 希望這些數據對遇到此問題的其他人有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM