【问题标题】:How to use NumPy to create two subarrays from the randomized contents of a source array?如何使用 NumPy 从源数组的随机内容创建两个子数组?
【发布时间】:2017-10-02 07:32:21
【问题描述】:

我有一个数组 A,我想创建数组 B 和 C。

基本上,我想在A中随机找到100个元素,将它们放在B中,其余的放在C中。

如果我使用 numpy.random.choice,我可以通过提取 A 中与随机列表中的索引匹配的所有元素来轻松创建 B,但我必须再次通过 A 才能找到所有符合不在 B 中并将它们放在 C 中。这可行,但也许有一个内置函数可以为我做到这一点。

有没有更便宜的方法?

【问题讨论】:

  • 也许其他用户能够想出一个绝妙的解决方案,但我敢打赌,使用屏蔽操作是可行的方法。生成一个布尔数组mask = np.ones(A.shape[0], dtype=bool);使用随机生成器将元素设置为 False; C = A[mask]; B = A[~mask]

标签: python arrays numpy random


【解决方案1】:

您可以使用索引从数组中选择元素并创建一个布尔掩码,如下所示:

indices = np.random.choice(len(a),3) # pick indices at random from array a
mask = np.ones(a.shape,dtype=bool)   # create boolean mask
mask[indices] = False                
a[indices]     # random elements from array 
a[mask]        # rest of array

【讨论】:

    【解决方案2】:

    你可以使用这个,numpy 内置函数

    import numpy as np
    import random
    a = np.array([1,2,3,4,5,6,7,8,9,10]);
    b = np.array(random.sample(a.values,3));
    c = np.setdiff1d(a,b)
    

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多