我还是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/

10-12 20:14