在Jupyter(IPython)上查找和删除需要大量内存的变量


检查或删除正在消耗内存的变量

在Jupyter(IPython)上执行数据分析时,数据越来越多地存储在内存中,因此您要检查消耗内存的变量。
在这种情况下,如果执行以下命令,则变量和变量的存储容量将显示在列表中。

Python2

1
2
3
4
5
6
7
import sys

print "{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|')
print " ------------------------------------ "
for var_name in dir():
    if not var_name.startswith("_"):
        print "{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|')

Python3

1
2
3
4
5
6
7
import sys

print("{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|'))
print(" ------------------------------------ ")
for var_name in dir():
    if not var_name.startswith("_"):
        print("{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|'))

输出结果如下所示。

スクリーンショット 2017-01-03 17.34.11.png

但是,此命令将输出在Jupyter上定义的所有变量的结果,因此,例如,如果您只想提取内存容量超过某个值的变量,则按以下Arrange as。

Python2

1
2
3
4
5
6
7
import sys

print "{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|')
print " ------------------------------------ "
for var_name in dir():
    if not var_name.startswith("_") and sys.getsizeof(eval(var_name)) > 10000: #ここだけアレンジ
        print "{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|')

Python3

1
2
3
4
5
6
7
import sys

print("{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|'))
print(" ------------------------------------ ")
for var_name in dir():
    if not var_name.startswith("_") and sys.getsizeof(eval(var_name)) > 10000: #ここだけアレンジ
        print("{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|'))

然后

スクリーンショット 2017-01-03 17.39.00.png

如您所见,只能提取具有大存储容量的变量。

完成此操作后,

1
del U_Global, V_Global

您可以指定不必要的变量,例如

并将其删除。
您可以释放内存并在Jupyter(IPython)上轻松地继续分析。

备注

标题说"在Jupyter(IPython)上",但是我认为它可能会以相同的方式显示在其他界面上。
但是,由于它使用str.format(),因此必须为Python 2.6或更高版本才能正确输出。

参考网址

  • http://docs.python.jp/2/library/sys.html
  • http://qiita.com/Kodaira_/items/30c84806b61792b613f2
  • http://stackoverflow.com/questions/33978/find-out-how-much-memory-is-being-used-by-an-object-in-python
  • http://stackoverflow.com/questions/633127/viewing-all-defined-variables
  • http://stackoverflow.com/questions/9989334/create-nice-column-output-in-python