2011-07-20 223 views
0

什麼是numpy矩陣的最大元素/情況或numpy矩陣的最大尺寸是多少?numpy矩陣的最大元素/大小?

上面的代碼在可變矩陣大小時返回內存錯誤...因此,從什麼環境事物決定(可用內存的數量?)?

for ret in xrange(5000,7000,50): 

    res = [] 
    for x in xrange(ret): 
     temp=[] 
     for y in xrange(ret): 
      temp.append(random.random()) 
     res.append(temp) 

    print "r" 
    r = numpy.mat(res) 
    print "s" 
    s = numpy.mat(res,dtype='f4') 
    print "t" 
    w = numpy.mat(res,dtype('f8')) 

問題:何時以及爲什麼它返回「內存錯誤」?

ps:我使用最後的python和numpy可用於Windows(是的,我知道...)7 64位。

+0

'res'在每個循環中被覆蓋。我認爲這不是你的意圖?你的最後一行是錯誤的,它應該是'w = numpy.mat(res,dtype ='f8')'。如果你的原始代碼中沒有覆蓋'ret',你可能會得到一個MemoryError,因爲結果列表很大。 – schlamar

+0

你內在的兩個循環可以用'r = np.random.random((ret,ret)'代替' –

+0

另外,你的內存錯誤可能來自你正在建立的列表,而不是numpy。使用嵌套列表製作一個numpy數組將比直接使用更多的內存。 7000x7000不是很大。 –

回答

1

請參閱Upper memory limit?

至於何時返回內存錯誤,答案是爲其中一個大對象分配內存。它可以是任何一個,因爲在分配後面的res行時,你的內存量將比以往任何時候都多,因爲在你指向rs之前,numpy矩陣不會被垃圾收集,或t處於另一個對象(在下一次迭代中創建的新矩陣)。

相關問題