2016-01-20 44 views
0

我想生成以下步進序列模式,但蟒蛇拋出 的MemoryErroritertools和pandas的內存錯誤?

import numpy as np 
import pandas as pd 
import itertools 

Temp = np.linspace(-5,5,pow(2,16)) 

df = pd.DataFrame([Temp*2] , index=['ColA','ColB']).T 

print df 

df2 = pd.DataFrame([e for e in itertools.product(df.ColA,df.ColB)],columns=df.columns) 

print df2 

錯誤

df2 = pd.DataFrame([e for e in itertools.product(df.ColA,df.ColB)],columns=df.columns) 
MemoryError 

請讓我知道我該怎麼解決這個問題?

回答

2

隨着power=16itertools.product(產生的cartesian product),你在你的DataFrame創造(2*2)^16=4,294,967,296tuples,或rows列表。你想要那麼長的序列嗎?

power = 16 
for i in range(power): 
    Temp = np.linspace(-5, 5, pow(2, i)) 
    df = pd.DataFrame([Temp] * 2, index=['ColA','ColB']).T 
    print(i, len(df), len(list(product(df.ColA, df.ColB)))) 

0 1 1 
1 2 4 
2 4 16 
3 8 64 
4 16 256 
5 32 1024 
6 64 4096 
7 128 16384 
8 256 65536 
9 512 262144 
10 1024 1048576 
11 2048 4194304 
12 4096 16777216 
13 8192 67108864 
14 16384 268435456 
... 
+0

是的,我想創建狀波形,並做此基礎上各種計算。 – prasad

+1

使用'dtype''float64',它可能至少需要4,294,967,296 * 64 * 2 /(8 * 1024)〜67GB的內存。 – Stefan

+0

是的。你是對的。事實上,即使我創建這張表,將它們存儲在Excel中是不可能的,因爲Excel無法存儲超過1,048,576行。 – prasad