for循環讀取數組遇問題:dexError: invalid index to scalar variable.

用for循環從文檔中讀取數組時,遇到一個bug,只能循環完成第一個循環,第二個循環就報錯: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]  # 排序,得到由高到低的序號
    print('i & fx:',i, fx[f_top_id[i]])
...

上面這段代碼就是想從文檔中的矩陣中一行接一行的提取數組,在for循環中讀取第一行沒問題,讀出第二行就報錯,其實原因很簡單,低級錯誤,弄了幾個小時debug,太不注意了,之前也遇到過。
問題出在fx這裏,從name, fx = zip(*result)得到後,放入循環中又繼續用這個變量名fx = np.array(fx)[i],這就炸鍋了,第二次循環就肯定報錯,因爲fx在第一個循環的參數又直接導入到第二個循環中的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]  # 排序,得到由高到低的序號
    print('i & fx:',i, f_x[f_top_id[i]])
...

記錄debug的問題,加深記憶,也希望能給其他遇到同樣報錯的人一些啓發,也感謝其他人的分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章