[英]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.