【问题标题】:Remove random subset of an array删除数组的随机子集
【发布时间】:2021-04-12 15:26:17
【问题描述】:

我有一个数组 a = array([ [x1,x2,...,xn], [y1,y2,...,yn]]) 所以a.shape=(2,n)。有没有一种快速的方法来获取这个数组的随机子集,即r = array([ [xi1,xi2,...,xip], [yi1,yi2,...,yip]]) 形式的数组?

【问题讨论】:

  • 能否请您也包括一些您尝试过的代码?
  • 我已经尝试过例如a0 = np.random.choice(a[0], size=p, replace=False) a1 = np.array([a[1][a0.tolist().index(value)] for value in a0]) a = np.vstack((a0,a1))

标签: python numpy multidimensional-array random


【解决方案1】:

您可以使用random.choice 屏蔽列和索引:

idx = np.random.choice([True,False], replace=True, size=a.shape[1],
                       p=[0.7,0.3]          # keep approx. 70% of columns
                      )
a[:, idx]

【讨论】:

    【解决方案2】:

    先获取一些随机索引:

    i=np.random.randint(2, size=a.shape[1])
    

    然后只保留这些尺寸:

    b=a[:,np.where(i==1)]
    

    例子:

    >>> a
    array([[1. , 2. , 3. , 4. , 5. , 6. , 7. ],
           [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]])
    >>> i=np.random.randint(2, size=a.shape[1])
    >>> i
    array([0, 0, 1, 1, 1, 1, 0])
    >>> a[:,np.where(i==1)]
    array([[[3. , 4. , 5. , 6. ]],
    
           [[0.3, 0.4, 0.5, 0.6]]])
    

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 2015-04-17
      • 2015-07-14
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      相关资源
      最近更新 更多