web-dev-qa-db-ja.com

モジュール内で使用されたときに定義されていないitertools

カスタム関数は、必要なときに呼び出すことができる別のモジュールに保存します。私の新しい関数の1つはitertoolsを使用していますが、名前エラーが発生し続けます。

NameError: name 'itertools' is not defined

それは本当に奇妙です。コンソールにitertoolsをインポートできますが、関数を呼び出すと名前エラーが発生します。通常、最初にライブラリをインポートする限り、カスタム関数内で他のライブラリ(pandas、sklearnなど)の関数を使用できます。

しかし、コンソールにitertoolsをインポートし、関数をコピーしてコンソールに貼り付けてから関数を呼び出すと、正常に機能します。

それは私を夢中にさせていますが、モジュールのルールなどを理解していないだけかもしれません。

モジュールで使用している関数は次のとおりです。 sklearnの例の1つから単純にコピーして貼り付けます。

import itertools    
def plot_confusion_matrix(cm, classes,
                              normalize=False,
                              title='Confusion matrix',
                              cmap=plt.cm.Blues):
        import itertools
        plt.imshow(cm, interpolation='nearest', cmap=cmap)
        plt.title(title)
        plt.colorbar()
        tick_marks = np.arange(len(classes))
        plt.xticks(tick_marks, classes, rotation=45)
        plt.yticks(tick_marks, classes)

        if normalize:
            cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
            print("Normalized confusion matrix")
        else:
            print('Confusion matrix, without normalization')

        print(cm)

        thresh = cm.max() / 2.
        for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
            plt.text(j, i, cm[i, j],
                     horizontalalignment="center",
                     color="white" if cm[i, j] > thresh else "black")

        plt.tight_layout()
        plt.ylabel('True label')
        plt.xlabel('Predicted label')

私はそれを関数内、モジュール内、そして私がそれを呼び出しているファイル内にインポートしようとしました-すべては運がありません。コンソールにインポートする場合は問題ありません。コンソールにインポートした後でも、作業中のファイル内で実行すると、同じエラーが発生します。

8
Adam

今は動作します。

重要なレッスン:モジュールを編集する場合は、spyder/ipython/whateverを閉じて再度開く必要があります。単にカーネルをリセットするだけでは十分ではありません。私の愚かさは知っていますが、おそらくこの答えは誰かの時間を節約するでしょう。

7
Adam

最初にitertools import productからを使用し、次にitertools.productを単純にproductに変更します。うまくいくはずです。

0

あなたはただ変わる
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):

に:

for i in range (cm.shape[0]): for j in range (cm.shape[1]):

0
Vong Ho