【问题标题】:Select 'some' random points from numpy array从 numpy 数组中选择“一些”随机点
【发布时间】:2017-09-16 09:20:22
【问题描述】:

我有两个相关的 numpy 数组,Xy。我需要从X 中选择n 随机行并将其存储在一个数组中,对应的y 值并将随机选择的点的索引附加到它上面。

我有另一个数组index,它存储了一个我不想采样的索引列表。

我该怎么做?

样本数据:

index = [2,3]
X = np.array([[0.3,0.7],[0.5,0.5] ,[0.2,0.8], [0.1,0.9]])
y = np.array([[0], [1], [0], [1]])

如果这些X 是随机选择的(其中n=2):

randomylSelected = np.array([[0.3,0.7],[0.5,0.5]])

期望的输出是:

index = [0,1,2,3]
randomlySelectedY = [0,1]

我该怎么做?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我会管理一个布尔值数组,我会不断地使用它来对索引数组进行切片并从结果中随机选择。

    n = X.shape[0]
    sampled = np.empty(n, dtype=np.bool)
    sampled.fill(False)
    rng = np.arange(n)
    
    k = 2
    
    while not sampled.all():
        sample = np.random.choice(rng[~sampled], size=k, replace=False)
        print(X[sample])
        print()
        print(y[sample])
        print()
        sampled[sample] = True
    
    [[ 0.2  0.8]
     [ 0.5  0.5]]
    
    [[0]
     [1]]
    
    [[ 0.3  0.7]
     [ 0.1  0.9]]
    
    [[0]
     [1]]
    

    【讨论】:

    • @scutnex 取决于您所说的记录。我正在用True 值更新sampled 数组...正在记录它。这是一种算法。有很多东西可以根据口味进行调整。
    【解决方案2】:

    如果您想随机选择n 行,以相同的概率选择任何行:

    n = 2 #for sake of argument
    randomlySelectedY = np.argsort(np.random.random(4))[:n] #generate a 1x4 array of random, uniformly distributed numbers and then select the indices of the lowest n numbers
    
    randomylSelected = X[randomlySelectedY]
    index = np.linspace(1,np.size(X[:,1]),np.size(X[:,1]))
    

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 2018-12-14
      • 2014-05-15
      • 2021-12-14
      • 2014-04-21
      • 2021-12-03
      • 1970-01-01
      • 2020-10-27
      • 2018-06-07
      相关资源
      最近更新 更多