对numpy数组进行加权重采样

k5ifujac  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(208)

我有一个50 x 4的numpy数组,我想重复这些行,使它成为一个500 x 4的数组。但问题是,我不能只沿着0个轴重复这些行。我想在扩展数组中有更多的小行和更少的大行。
输入数组包含如下所示的数据:

  1. [1, 1, 16, 5]
  2. [8, 10, 512, 10]
  3. ...
  4. [448, 8192, 409600, 150]

此处,初始行较小,最后一行较大。但每列的比例不同。即,16对于列2可能是非常低的值,但对于列1可能是较高的值
我如何使用numpy甚至列表来实现这一点?
预期输出将是形状为500 x 4的向量,其中每行都取自输入向量,并重复一定次数。

  1. [1, 1, 16, 5] # repeated thrice
  2. [1, 1, 16, 5]
  3. [1, 1, 16, 5]
  4. [8, 10, 512, 10] # repeated twice
  5. [8, 10, 512, 10]
  6. ...
  7. [448, 8192, 409600, 150]
eit6fx6z

eit6fx6z1#

你可以使用np.repeat在数组中任意次数地重复给定的值,然后用它作为输入数组的索引(因为np.repeat不能直接作用于二维数组)。

  1. # Example of random input
  2. inputArr = np.random.randint(0, 1000, (50, 4))
  3. # Example with [2, 3, ..., 52] repeated lines
  4. counts = np.arange(2, 52)
  5. # Actual computation
  6. outputArr = inputArr[np.repeat(np.arange(inputArr.shape[0]), counts)]

相关问题