如何向numpy数组的n个元素添加不同的随机值?

问题描述 投票:-2回答:1

我正在尝试将随机值添加到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矩阵大一点,循环通常效率不高。

python numpy random
1个回答
0
投票

这里是基于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.        ]])
© www.soinside.com 2019 - 2024. All rights reserved.