numpy数组中非零值的随机索引

2024-04-25 05:25:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望以前没人问过这个问题。我不知道怎样才能重新表述这个问题。这个post很相似,但仍然不是我要找的。在

我有一个长度可变的numpy数组(大约在4-12之间)。数组的值为0或1。我想从数组中得到一个随机样本的索引,它不是0。在

我的想法是这样做:

def sample(self):
        flag = 0
        while flag == 0:
            sampleValue = randint(0, len(myArray())-1)
            flag = myArray()[sampleValue]
        return sampleValue

但这并不是一个好的代码,最终会陷入一个永无止境的while循环中。我当然可以改进一下。很有可能在python中有一种更漂亮的方法来实现这一点:)


Tags: sample方法代码selfnumpylenreturndef
2条回答

您可以首先生成索引列表,该列表包含:

my_idcs = np.where(my_array)[0]

然后您可以随机获得其中一个索引,例如使用random.choice

^{pr2}$

因此,这将返回一个索引,其中对应的值my_array[my_idx]1。在

注意,如果my_array中没有1,那么这将引发一个IndexError。在

您可以使用numpy.nonzero获得数组a非零的索引

>>> a = np.array([1, 0, 1, 0, 1, 1, 1, 0, 0])
>>> idx_nonzero, = np.nonzero(a)
>>> 
>>> idx_nonzero
array([0, 2, 4, 5, 6])

然后用numpy.random.choice选择其中一个值。在

^{pr2}$

相关问题 更多 >