我有一个长度为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
是十,而{}是百。在
Tags:
为了确保不会将同一元素翻转两次甚至更多次,我们可以使用^{} 将其可选的
replace
参数设置为False,在该长度范围内创建唯一索引。然后,简单地索引到输入数组并一次性翻转就可以得到所需的输出。因此,我们会有这样的实现-更快的版本:对于} ,它探索使用
np.random_choice
的更快版本,我建议阅读^{np.argpartition
来模拟相同的行为。在您需要将数组的索引从
m
更改为i
,才能真正更改值。 结果:我的输出:
^{pr2}$您可以对数组索引进行随机排列,取其中的第一个
m
并翻转它们的值:使用
permutation
验证您不会选择同一个索引两次。在相关问题 更多 >
编程相关推荐