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