2016-09-28 4 views
0

私のコードの関連部分はここにあります *編集:初めて外側のループは含まれませんでした。pythonリストの問題、値に設定されている要素がありませんでした

for i in range(numAttributes): 
    for w in range(numFeatures): 
     if X[i][w]!=0: 
      print ("Setting nFeat[",y[i],"][",w,"]") 
      self._Nfeat[y[i]][w]=1  
      print self._Nfeat[3][numFeatures-1] 
      if self._Nfeat[3][numFeatures-1]!=0: 
       print("y[i] is: ", y[i]," and w is: ", w) 
       sys.exit() 

本質的にはself._Nfeat[3][numFeatures-1]が1に設定されているはずです。 printステートメントと最後のifステートメントは、すべてデバッグのために配置されています。

最後の4つの物事の出力は、次のとおりです。

0 
setting nFeat[1][265676] 
1 
y[i] is 1 and w is 26576 

私も他の場所で他の場合self._Nfeat[3][numFeatures-1]!=0チェックを入れて、それは間違いなく右の現在の配置の前に起こっているのを確認しました。

self._Nfeat[3][numFeatures-1]はすべきときに変更されているように見えるので、これは非常に混乱しています。

リストself._Nfeatがでのinitに初期化されている:その後、他にどこのコードにはあり

self._Nfeat=[[0]*numFeatures]*numClasses 

で再初期化されていないメソッドの開始時に

self._Nfeat=[] 

このリストをまったく扱うものではありません。

私は問題があなたのインスタンスであるのpythonに新しいですし、大幅に任意のヘルプをお願い申し上げます

+0

あなたの質問は明確ではないので、具体的にする必要があります。どうやら 'y [i]'は '1'ですが、' nFeat [1] 'ではなく' nFeat [3] 'をチェックしているようです。その理由は何ですか? – Selcuk

+0

nFeat [3] [265676]は1に設定しないでください。しかし、コードのこの時点で起こっています。 nFeat [1]が参照されているとき、この部分で1に設定されているという混乱が生じます。 – user3692508

+0

ネストされたリストを生成するために、おそらく同じリストをクローンしています。この場合、すべてのリストは同じメモリ位置を指します。最初に 'self._Nfeat'をインスタンス化する方法を投稿してください。 – Selcuk

答えて

0

self._Nfeat=[[0]*numFeatures]*numClasses 

これは結果としてなる、numClasses回(クローンではない!)同じリストをコピーしますあなたが経験しているバグで。それを次のように変更してください:

self._Nfeat = [[0] * numFeatures for _ in range(numClasses)] 
関連する問題