2016-05-05 10 views
1

現在、私のPythonインタプリタによって管理されているすべてのnumpy配列のコレクションが必要です。以前の回答は、gc.get_objects()が私にとってこれを行うべきだと示唆しています。しかし、私は期待どおりの結果を得ることはありません:Pythonインタプリタで現在知られているすべてのNumPy配列を一覧表示する

In [1]: import numpy as np 

In [2]: import gc 

In [3]: x = np.ones(5) 

In [4]: any(item is x for item in gc.get_objects()) 
Out[4]: False 

は現在インスタンス化さ知らnumpyのアレイ(または実際に任意の型のオブジェクト)の全てを取得する方法はありますか?

+0

最終的に達成しようとしていることについて少し詳しく説明できますか? –

答えて

3

、連続解析でジム・クリスト内部通信から:

これはgc.get_objectsが動作しない理由を説明:https://mail.scipy.org/pipermail/numpy-discussion/2014-September/071186.html

numpyのは、コンテキストマネージャとして割り当てを追跡するためのツールが含まれています。これに加えてWeakSetが問題を解決するのに役立つ可能性があります。

https://github.com/numpy/numpy/tree/master/tools/allocation_tracking

1

この問題が解決しようとしている問題を解決するかどうかはわかりませんが、locals()を使用するとどうなりますか?それは少なくともあなたの現在のインタラクティブなセッションの通訳者が追跡しているヴァルスを取得することから始めますか?

import numpy as np 
a = np.array([1, 2, 3]) 
b = np.array([2, 3, 4]) 
filter(lambda x : isinstance(x, np.ndarray), locals().values()) 
+0

私は、地方自治体はローカルスコープのみを提供し、他の場所に割り当てられた変数は提供しないと考えています。 – MRocklin

2

これは完璧な答えはありませんが、this stackoverflow postに応じてローカルで宣言した変数のすべての辞書を取得するためにlocals()を使用することができます。

あなたは、単純なのdictの内包表記を使用して、既知のnumpyのアレイの全てを取得することができます:

import numpy as np 
np_arrays = {k:v for k,v in locals().items() if isinstance(v, np.ndarray)} 

あなたは、その後、しかし、あなたが好きな辞書を反復処理することができます。参考のため

+1

私は、地方自治体はローカルスコープのみを提供し、他の場所に割り当てられた変数は提供しないと考えています。 – MRocklin

関連する問題