2017-08-03 75 views
0

我正在使用python-3.x,並且我搜索了有關以下錯誤但找不到正確的解決方案。該錯誤發生在下面的代碼中。IndexError:索引9超出軸9的大小爲9的邊界

我有一個隨機numpy二進制數組和一個隨機數組數組,所以代碼將根據其他數組的值刪除一個二進制數據行,如代碼中所示。

import random 
import numpy as np 
np.set_printoptions(threshold=np.nan) 


for i in range (100): 


    binary= np.random.randint (2, size=(10, 4)) 
    print("binary:" '\n',binary) 


    value = np.random.randint (200, size=(10, 1)) 
    print("value:" '\n',value) 




    for i in range (2): 
#  the loseer how have the of the binarys who has the smaslets value 
     loser = np.argmin(value) 
#  print ("loser:",loser) 
#  print("loser:", loser,(value[loser])) 
#  print (binary[loser,]) 
#  print("Loser=", "Index:", loser,"value:",(value[loser]), "binary:",(binary[loser,])) 
     print("Index:", loser) 
     print("value:",(value[loser])) 
     print("binary:",(binary[loser,])) 
     print("Loser=", "Index:", loser,"value:",(value[loser]), "binary:",(binary[loser,])) 



     binary = np.delete(binary, (loser), axis=0) 
     print("binary:" '\n',binary) 

的錯誤是:IndexError:指數9是出界對軸0,大小9'

所以,在我的代碼,問題出在哪裏以及如何解決 任何幫助將不勝感激

回答

0

您正在訪問數組的邊界之外。

在你的內部循環,你有一個線binary = np.delete(binary, (loser), axis=0)

比方說,第一次通過,最小值的指數(loser)是9(10元素數組的最後一個元素)。您的binary數組長度爲10.您從數組中刪除該條目。二進制數組現在長度爲9. value數組中的最小值的索引沒有改變!因此,下一次,當您嘗試通過print("binary:",(binary[loser,]))訪問元素9時,會出現錯誤。

至於解決您的問題,您正在使用單個索引loser確定從一個數組訪問兩個不同大小的數組中的元素。您需要確定如何解決此問題。

+0

可以請你解釋一下如何解決這個問題 – azeez

+0

@azeez有很多方法可以解決這個問題。您選擇的解決方案應該是符合您的目標的解決方案。 – iheanyi

+0

對不起,但還沒有得到答案,我嘗試了很多方法,但沒有一個可行。所有我需要做的就是刪除二進制數組中最低的兩行...... – azeez

相關問題