相关疑难解决方法(0)

numpy ndarray使用了多少内存?

有人知道numpy ndarray使用了多少内存?(假设有10,000,000个浮动元素).

python memory arrays floating-point numpy

21
推荐指数
1
解决办法
8597
查看次数

为什么我的python进程占用了这么多内存?

我正在开发一个项目,涉及使用python来读取,处理和写入有时大到几百兆字节的文件.当我尝试处理一些特别大的文件时,程序偶尔会失败.它没有说'记忆错误',但我怀疑这是问题(实际上它根本没有理由失败').

我一直在测试较小文件上的代码并观察"顶部"以查看内存使用情况,并且通常达到60%.top说我的总内存为4050352k,所以3.8Gb.

同时我正在尝试使用以下一小段代码跟踪python本身的内存使用情况(请参阅我昨天的问题):

mem = 0
for variable in dir():
    variable_ = vars()[variable]
    try: 
        if str(type(variable_))[7:12] == 'numpy':
            numpy_ = True
        else:
            numpy_ = False
    except:
        numpy_ = False
    if numpy_:
        mem_ = variable_.nbytes
    else:
        mem_ = sys.getsizeof(variable)
    mem += mem_
    print variable+ type: '+str(type(variable_))+' size: '+str(mem_)
print 'Total: '+str(mem)
Run Code Online (Sandbox Code Playgroud)

在我运行该块之前,我将所有不需要的变量设置为None,关闭所有文件和数字等等.在该块之后,我使用subprocess.call()来运行下一阶段所需的fortran程序.处理.在fortran程序运行时查看顶部显示fortran程序正在使用~100%的cpu和~5%的内存,而python正在使用0%的cpu和53%的内存.然而,我的一小段代码告诉我python中的所有变量加起来只有23Mb,应该是~0.5%.

那么发生了什么?我不希望那个小片段能给我一个关于内存使用情况的信息,但它应该准确到几Mb内吗?或者只是顶部没有注意到内存已经被放弃,但是如果有必要,它可以用于需要它的其他程序吗?

根据要求,这里是用尽所有内存的代码的简化部分(file_name.cub是一个ISIS3立方体,它是一个包含相同地图的5层(波段)的文件,第一层是光谱辐射,下一层4与纬度,经度和其他细节有关.这是我想要处理的火星图像.StartByte是我之前从.cub文件的ascii标题中读取的值,告诉我数据的起始字节,样本和Lines是地图的尺寸​​,也从标题中读取.):

latitude_array = 'cheese'   # It'll make sense in a moment
f_to = open('To_file.dat','w') 

f_rad = open('file_name.cub', 'rb')
f_rad.seek(0)
header=struct.unpack('%dc' % (StartByte-1), f_rad.read(StartByte-1))
header = None …
Run Code Online (Sandbox Code Playgroud)

python memory optimization numpy

12
推荐指数
1
解决办法
2万
查看次数

numpy数组中有多少内存?RAM是限制因素吗?

我正在使用numpy创建一个边长为100的立方体数组,因此总共包含100万个条目.对于每百万个条目,我插入一个100x100矩阵,其条目由随机生成的数字组成.我使用以下代码来执行此操作:

import random
from numpy import *

cube = arange(1000000).reshape(100,100,100)

for element in cube.flat:
    matrix = arange(10000).reshape(100,100)
    for entry in matrix.flat:
        entry = random.random()*100
    element = matrix
Run Code Online (Sandbox Code Playgroud)

我期待这需要一段时间,但是生成了100亿个随机数,我不确定我的电脑是否可以处理它.这样一个阵列会占用多少内存?RAM是一个限制因素,即如果我的计算机没有足够的RAM,它是否无法实际生成阵列?

此外,如果有更高效的实现此代码,我会很感激提示:)

python memory arrays numpy

8
推荐指数
1
解决办法
9976
查看次数

有没有len(someObj)不调用someObj的__len__函数的情况?

有没有len(someObj)不调用someObj __len__函数的情况?

我最近用(成功的)努力将前者替换为后者以加速某些代码.我想确保在某些地方len(someObj)与someObj不同的边缘情况.__len__().

python

7
推荐指数
2
解决办法
980
查看次数

标签 统计

python ×4

memory ×3

numpy ×3

arrays ×2

floating-point ×1

optimization ×1