首页 > 解决方案 > 如何将不同的随机值添加到 numpy 数组的 n 个元素?

问题描述

我正在尝试将随机值添加到 numpy 数组中的特定数量的值中,以改变我的神经网络的权重。例如,此数组中的 2 个值

[ [0 1 2]
  [3 4 5]
  [6 7 8] ]

应该是变异的(即添加一个介于 -1 和 1 之间的随机值)。结果可能看起来像这样:

[ [0   0.7 2]
  [3   4   5]
  [6.9 7   8]]

我更喜欢没有循环的解决方案,因为我的真正问题比 3x3 矩阵大一点,并且循环通常效率低下。

标签: pythonnumpyrandom

解决方案


这是一种基于np.random.choice-

def add_random_n_places(a, n):
    # Generate a float version
    out = a.astype(float)

    # Generate unique flattened indices along the size of a
    idx = np.random.choice(a.size, n, replace=False)

    # Assign into those places ramdom numbers in [-1,1)
    out.flat[idx] += np.random.uniform(low=-1, high=1, size=n)
    return out

样品运行 -

In [89]: a # input array
Out[89]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [90]: add_random_n_places(a, 2)
Out[90]: 
array([[0.        , 1.        , 2.        ],
       [2.51523009, 4.        , 5.        ],
       [6.        , 7.        , 8.36619255]])

In [91]: add_random_n_places(a, 4)
Out[91]: 
array([[0.67792859, 0.84012682, 2.        ],
       [3.        , 3.71209157, 5.        ],
       [6.        , 6.46088001, 8.        ]])

推荐阅读