![](/img/trans.png)
[英]creating an iterator in Python from a dictionary in memory-efficient way
[英]Memory-efficient way of representing non-uniform datasets in python
我想以一種很好的方式存儲我的數據,以便以后可以使用標准包(例如 seaborn)有效地分析/繪制它。 Pandas 似乎是用於存儲結構化數據的庫的 go。 但是,我找不到令人滿意的方法來使用它來存儲非均勻數據。
假設我有 3 個 arrays,代表 100 只老鼠、1000 只貓和 200 只狗的長度。
ratLength = np.random.uniform(1, 2, 100)
catLength = np.random.uniform(2, 3, 1000)
dogLength = np.random.uniform(3, 4, 200)
據我了解,我有 2 個選項可以將此類數據存儲在 Pandas dataframe
np.nan
以便它們的長度相同在這兩種情況下,存儲結構都迫使我顯着增加數據集的 memory 占用空間。 我想人們可以用更復雜的數據集構建更多的病態例子。
問題:您能否推薦一個用於 python 的框架,以有效地處理非均勻數據集。 它可以是使用 Pandas 的更智能方式,也可以是不同的數據存儲庫,我都可以。
除了我的評論(寫評論太長):
s = pd.Series()
rat = np.random.uniform(1, 2, 100)
cat = np.random.uniform(2, 3, 1000)
dog = np.random.uniform(3, 4, 200)
s['rat'] = rat
s['cat'] = cat
s['dog'] = dog
s.memory_usage(deep=True)
#10892
s.memory_usage(deep=True, index=False)
#10712
sum(map(sys.getsizeof, (cat,rat,dog)))
#10688
所以額外的 memory 要求是 180 B 的索引和 24 B 的系列開銷。
s1 = pd.Series() s1 = s1.append(pd.Series(rat, index=['rat']*len(rat))) s1 = s1.append(pd.Series(cat, index=['cat']*len(cat))) s1 = s1.append(pd.Series(dog, index=['dog']*len(dog))) s1.memory_usage(deep=True) #88400 --> 1300 strings. BAD s1.index = pd.CategoricalIndex(s1.index) s1.memory_usage(deep=True) #11960 --> 3 categories
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.