2011-07-20 201 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处于另一个对象(在下一次迭代中创建的新矩阵)。

相关问题