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

时间:2018-12-02 17:39:25

标签: python numpy random indexing

我希望以前没有问过。不知道如何重新表述这个问题。这个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中有一种更漂亮的方法:)

2 个答案:

答案 0 :(得分:4)

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

>>> 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选择这些值之一。

>>> np.random.choice(idx_nonzero)
5

答案 1 :(得分:1)

您可以首先生成具有以下内容的索引列表:

my_idcs = np.where(my_array)[0]

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

from random import choice

my_idx = choice(np.where(my_array)[0])

因此,这将返回单个索引,其中相应的值my_array[my_idx]1

请注意,如果1中没有my_array,则将引发IndexError