我的示例代碼是在python中,但我詢問了一般原理。時變數據:元組與二維數組列表?
如果我在時間 - 值對中有一組數據,我應該將它們存儲爲二維數組還是作爲元組列表?舉例來說,如果我有這樣的數據:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
是一般最好將其存儲這樣的:
data=[v,t]
或元組的列表:
data=[(1,1),(4,2)(4,3)...]
是否有「標準」這樣做的方式?
我的示例代碼是在python中,但我詢問了一般原理。時變數據:元組與二維數組列表?
如果我在時間 - 值對中有一組數據,我應該將它們存儲爲二維數組還是作爲元組列表?舉例來說,如果我有這樣的數據:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
是一般最好將其存儲這樣的:
data=[v,t]
或元組的列表:
data=[(1,1),(4,2)(4,3)...]
是否有「標準」這樣做的方式?
的總陣列容器可能是最好的選擇。假設你的時間點沒有定期間隔(因此你需要保持它的軌道,而不是僅僅使用索引),這使您可以採取設置喜歡你的整個數據的切片:
import numpy as np
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
data = np.array([v,t])
,那麼你可以切它可以輕鬆地獲取數據的一個子集:
data[:,2:4] #array([[4, 4],[3, 4]])
ii = [1,2,5] # Fancy indexing
data[:,ii] # array([[4, 4, 4],
# [2, 3, 6]])
謝謝!我認爲,反思這可能是最合適的,因爲除了簡化切片之外,它還可以快速,自然地執行從數據製作圖表等操作。 – 2011-04-11 16:01:02
@Mike:很高興我能幫上忙。如果您認爲這是有用的,那麼您應該對其投票並/或將其標記爲解決方案。 – JoshAdel 2011-04-11 16:04:17
你可以試試字典嗎?在其他語言中,這可能被稱爲哈希映射,哈希表,關聯數組或其他意義相同的術語。當然,這取決於你打算如何訪問你的數據。
相反的:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
你必須:
v_with_t_as_key = {1:1, # excuse the name...
2:4,
3:4,
4:4,
5:23,
6:4}
這是蟒蛇一個相當標準的結構,但如果順序很重要,你可能想看看在有序dictionarycollections。
如果您想要輕鬆訪問切片數據,則不建議使用這種方法。這將綁定您一次檢索單個時間點,並且您必須操作/重新構建您的數據結構以通過單鍵或值對以外的方式獲取它。 – JoshAdel 2011-04-11 15:32:04
@JoshAdel:這是一個有效的點,儘管可以通過選擇這種數據類型的不同實現來解決。實質上,這種關聯數據結構使處理相關數據更容易處理代碼,但根據您的項目可能會有其他外觀@Mike – theheadofabroom 2011-04-11 15:37:30
如果速度是您最關心的問題,請在Python中查看Numpy。
一般來說,你應該選擇一個數據結構,使數據處理自然和容易。之後擔心速度,在知道它有效後!
對於一個簡單的數據結構,如何元組的列表:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
data=[(1,1),(4,2)(4,3)...]
然後你就可以解開,像這樣:
v,t=data[1]
#v,t are 4,2
這種方法很好,除非您需要查找一個集合中的項目其他,當你可能希望使用關聯數據類型,如字典。 – theheadofabroom 2011-04-11 15:41:36
我發現,探索和原型,它更方便地存儲爲列的列表/鋸齒形排列,其中第一列是觀測指標之後的每一列都是一個變量。
數據= [(1,2,3,4,5,6),(1,4,4,4,23,4)]
大多數我加載許多觀察與時間許多變量,然後執行排序,格式化或顯示其中一個或多個變量,甚至將兩組數據與列作爲參數進行連接。當我需要抽出一部分觀測數據時,這種情況更爲罕見。即使我這樣做,使用一個函數返回給定一列觀察索引的數據子集也會更方便。儘管如此,我仍然使用函數將鋸齒狀數組轉換爲2d數組並轉置2d數組。
這一切都取決於你打算如何使用數據。 – 2011-04-11 15:27:41
這是我不知道將來如何使用數據的情況之一,儘管可能會對數據進行繪圖和統計分析等操作,這就是爲什麼我決定JoshAdel的解決方案可能是最適合。 – 2011-04-13 10:05:06