繁体   English   中英

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

[英]Random index of a non zero value in a numpy array

我希望以前没有问过。 不知道如何重新表述这个问题。 这篇文章很相似,但仍然不完全是我想要的。

我有一个可变长度的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中有一种更漂亮的方法:)

您可以使用numpy.nonzero获取数组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选择这些值numpy.random.choice

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM