用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的問題,加深記憶,也希望能給其他遇到同樣報錯的人一些啓發,也感謝其他人的分享。