Arrays 基于另一个数组中的最小值删除数组中的行
我使用的是python-3.x,我搜索了以下错误,但没有找到正确的解决方案 错误是:Arrays 基于另一个数组中的最小值删除数组中的行,arrays,python-3.x,numpy,Arrays,Python 3.x,Numpy,我使用的是python-3.x,我搜索了以下错误,但没有找到正确的解决方案 错误是: IndexError: index 9 is out of bounds for axis 0 with size 9' 所以我要做的是创建一个随机二进制数组“binary”,也是一个随机数数组“value”,我想根据“value”数组中最小两个值的(索引)删除二进制数组中最低的两行 据我所知,我正在访问数组的边界之外,但解决此错误的正确方法是什么 因此,在我的代码中,问题在哪里?如何解决?非常感谢您的帮助
IndexError: index 9 is out of bounds for axis 0 with size 9'
所以我要做的是创建一个随机二进制数组“binary”,也是一个随机数数组“value”,我想根据“value”数组中最小两个值的(索引)删除二进制数组中最低的两行
据我所知,我正在访问数组的边界之外,但解决此错误的正确方法是什么
因此,在我的代码中,问题在哪里?如何解决?非常感谢您的帮助
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)
在这段代码中,我使用了np.argmin,因为我不想使用排序 代码中的问题是,在范围(2)中i的
的第一次迭代后,您从二进制
中删除了一个元素,但没有从值
中删除。因此,这些数组不再具有相同的长度,它们中的索引也不一致。此外,通过在两次迭代中执行loser=np.argmin(value)
,您只需两次找到相同的最小值,而不是两个最小值
相反,您可以执行以下操作:
binary= np.random.randint (2, size=(10, 4))
value = np.random.randint (200, size=(10, 1))
ind = np.argpartition(-value.T[0], -2)[-2:]
binary=np.delete(binary,ind,0)
与排序不同,它以线性时间运行,使用。它查找k
最大元素的索引(不按排序顺序)。是的
因为您需要2个最小的元素,而且我还将value
重塑为1D
数组以将其输入np.argpartition
代码中的问题是,在范围(2)
中i的的第一次迭代后,您从二进制
中删除了一个元素,但没有从值
中删除。因此,这些数组不再具有相同的长度,它们中的索引也不一致。此外,通过在两次迭代中执行loser=np.argmin(value)
,您只需两次找到相同的最小值,而不是两个最小值
相反,您可以执行以下操作:
binary= np.random.randint (2, size=(10, 4))
value = np.random.randint (200, size=(10, 1))
ind = np.argpartition(-value.T[0], -2)[-2:]
binary=np.delete(binary,ind,0)
与排序不同,它以线性时间运行,使用。它查找k
最大元素的索引(不按排序顺序)。是的
因为您需要2个最小的元素,而且我还将value
重塑为1D
数组以将其输入np.argpartition