Skip to main content
 首页 » 编程设计

python之从数组中随机翻转 m 个值

2025年05月04日26lvdongjie

我有一个长度为 n 的数组,我想从中随机选择 m 元素并翻转它们的值。什么是最有效的方法?

有两种情况,m=1情况是特例。可以单独讨论,m=/=1。

我的尝试是:

import numpy as np 
n = 20 
m = 5 
#generate an array a 
a = np.random.randint(0,2,n)*2-1 
#random choose `m` element and flip it. 
for i in np.random.randint(0,n,m): 
    a[m]=-a[m] 

假设m是十位,n是百位。

请您参考如下方法:

为了确保我们不会将同一个元素翻转两次甚至更多次,我们可以使用 np.random.choice 在该长度范围内创建唯一索引。使用其可选的 replace 参数设置为 False。然后,简单地索引输入数组并一次性翻转应该给我们想要的输出。因此,我们会有这样的实现 -

idx = np.random.choice(n,m,replace=False) 
a[idx] = -a[idx] 

更快的版本:对于 np.random_choice 的更快版本,我建议阅读 this post探索使用 np.argpartition 来模拟相同的行为。