簡體   English   中英

Python中3D數組的最佳數據結構

[英]Best data structures for 3D array in Python

我正在開發Touch Designer中用於位置“軌跡”的移動平均濾波器,該濾波器實現了Python運行時。 我是Python的新手,我不清楚要使用的最佳數據結構。 pcode大致為:

  1. 接收新的曲目列表,其格式為:

    id,posX,posY
    2001,0.54,0.21
    2002,0.43,0.23
    ...

  2. 如果傳入的X和Y值已存在,則將其添加到以“ id”為鍵的現有數據結構中
  3. 為新ID創建新條目
  4. 刪除傳入數據中不存在的所有ID條目
  5. 返回每個id的X和Y值的移動平均值

問題:將其作為鍵為id且值是列表列表的哈希表來執行此操作是否是一個好主意? 例如:

ids = {2001: posVals, 2002: posVals2}

哪里posVals是[x,y]對的列表?

我認為這就像一個3D數組,但是我想在其中使用id作為很多操作的關鍵。

謝謝

首先,如果ID都是相對較小的正整數,並且數組幾乎完全密集(也就是說,幾乎所有ID都將存在),那么dict只會增加額外的開銷。 另一方面,如果存在大量,較大的間隙或不同類型的鍵,則將dict用作“稀疏數組”是很有意義的。

同時,對於其他兩個維度,…您將擁有多少個ID,每個ID有幾對? 如果我們要講的是每個ID少數幾個對,而所有ID共有數千個對,則每個ID的成對列表非常好(盡管我可能將每個對表示為一個元組而不是一個列表),以及其他任何東西否則會增加不必要的復雜性。 但是,如果每個ID將有很多對,或者總數很多,則可能會遇到存儲或性能問題。

如果您可以使用第三方庫numpy ,那么它可以在二維內存數組中存儲的數字數組要比一列數字對少得多,並且可以執行計算方法,例如使用更簡短/更易讀的代碼以及更多的移動平均值。減少CPU時間。 實際上,它甚至可以為您存儲稀疏的3D陣列。

如果你只能使用標准庫,該array模塊可以讓你大部分的相同內存的好處,但沒有簡單的好處(事實上,你的代碼變得稍微復雜一些,因為你代表二維數組作為一維數組,老式C風格-盡管您可以很輕松地將其包裝起來)或時間性能上的好處,但這對稀疏性無濟於事。

是的,這就是我要做的。 這種方式非常直觀,假設您始終按其ID查找事物,而無需以其他方式進行排序。

同樣,Python中的術語是dict (如字典中),而不是哈希表。

暫無
暫無

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

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