【问题标题】:How to add different random values to n elements of a numpy array?如何将不同的随机值添加到 numpy 数组的 n 个元素?
【发布时间】:2020-04-25 20:15:31
【问题描述】:

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

【问题讨论】:

  • 创建一个具有随机值的数组已经在网上进行了相当详尽的介绍,就像添加两个数组一样。只是你被困在哪里?发布带有特定问题的代码,而不是讨论您可能会尝试的事情。请从intro tour 重复how to ask
  • 我以为我已经清楚地说明了我的问题。我现在删除了解决这个问题的第一个(低效且不优雅的)方法,这可能会分散注意力。很抱歉,除了一定数量的随机值之外,我找不到任何关于如何创建填充零的数组的建议,也许我只是不知道要搜索的正确术语。

标签: python numpy random


【解决方案1】:

这是基于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.        ]])

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多