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