2017-08-03 79 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

相关问题