我还是Numpy和Python的新手。我想知道什么是更有效的方法来随机更改numpy数组中仅5%的值的顺序,并对其余95%的值保持相同的索引顺序?
假设我有一个包含100个整数元素的以下数组。
In [7]:a
Out[8]: array([ 2., 2., 2., 2., 1., 0., 2., 2., 1., 2., 1., 2., 2.,
2., 1., 2., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1.,
2., 2., 1., 0., 2., 2., 2., 2., 2., 2., 1., 2., 1.,
1., 2., 1., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1.,
0., 1., 2., 2., 1., 2., 2., 2., 2., 2., 0., 2., 1.,
2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2.,
1., 1., 2., 1., 2., 1., 2., 2., 2., 1., 1., 2., 2.,
1., 2., 2., 2., 1., 1., 2., 2., 1.])
如何使用python和numpy随机排列值的5%左右?
最佳答案
您可以抽取5%的索引样本,在这些索引处创建值的副本,对值进行随机排序,然后重新分配。请记住,np.random.shuffle
是就地操作。
import numpy as np
a = np.array(
[ 2., 2., 2., 2., 1., 0., 2., 2., 1., 2., 1., 2., 2.,
2., 1., 2., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1.,
2., 2., 1., 0., 2., 2., 2., 2., 2., 2., 1., 2., 1.,
1., 2., 1., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1.,
0., 1., 2., 2., 1., 2., 2., 2., 2., 2., 0., 2., 1.,
2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2.,
1., 1., 2., 1., 2., 1., 2., 2., 2., 1., 1., 2., 2.,
1., 2., 2., 2., 1., 1., 2., 2., 1.])
ix_size = int(0.05 * len(a))
ix = np.random.choice(len(a), size=ix_size, replace=False)
b = a[ix]
np.random.shuffle(b)
a[ix] = b
关于python - 给出百分比(5%)以随机置换numpy数组的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48481902/