1. ホーム
  2. プログラミング言語
  3. パイソン

for ループで配列を読み込む際の問題: dexError: スカラー変数へのインデックスが無効です。

2022-01-21 05:21:59
<パス

forループを使ってドキュメントから配列を読み込む際、最初のループだけがループし、2回目のループでエラーが報告されるバグに遭遇しました:。 dexError: invalid index to scalar variable.

実は変数設定の問題で、コードは以下の通りです。

...
with open(save_path, 'rb') as fi1:
        result = pickle.load(fi1, encoding='iso-8859-1')
    name, fx = zip(*result)  
    
for i in range(0, 10):
    fx = np.array(fx)[i]  
    f_top_id = fx.argsort()[::-1][0:10] # sort to get the number from highest to lowest
    print('i & fx:',i, fx[f_top_id[i]])
...

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上記のコードは、行の後に文書の行の行列から配列を抽出しようとしている、forループで最初の行を読むには問題ありません、エラーで2行目を読んで、実際には、理由は非常に単純で、低レベルのエラーは、あまりにも不注意、前に遭遇した数時間のデバッグを取得します。
問題は fx ここでは name, fx = zip(*result) 取得したら、ループの中に入れて、続けて変数名 fx = np.array(fx)[i] これは吹き出し、2つ目のループは間違いなくエラーを報告するので fx を直接インポートして、2番目のループの fx というのが問題で、実際には fx のデータは変わらない。
回避策 のforループのデータは fx のように、変数名を別のものに変更することで解決します。 f_x と入力すれば、次のように完了です。

...
with open(save_path, 'rb') as fi1:
        result = pickle.load(fi1, encoding='iso-8859-1')
    name, fx = zip(*result)  
    
for i in range(0, 10):
    f_x = np.array(fx)[i]  
    f_top_id = f_x.argsort()[::-1][0:10] # sort to get the number from highest to lowest
    print('i & fx:',i, f_x[f_top_id[i]])
...

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

デバッグ問題を記録することで、私の記憶を深め、同じエラー報告に遭遇した他の人に何らかのインスピレーションを与えることを期待し、共有してくれた他の人に感謝する。