我有一个长度为 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
来模拟相同的行为。
关于python - 从数组中随机翻转 m 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38879244/