对numpy数组进行加权重采样

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

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

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

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

[1, 1, 16, 5]      # repeated thrice
[1, 1, 16, 5]
[1, 1, 16, 5]
[8, 10, 512, 10]   # repeated twice
[8, 10, 512, 10]
...
[448, 8192, 409600, 150]
eit6fx6z

eit6fx6z1#

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

# Example of random input
inputArr = np.random.randint(0, 1000, (50, 4))

# Example with [2, 3, ..., 52] repeated lines
counts = np.arange(2, 52)

# Actual computation
outputArr = inputArr[np.repeat(np.arange(inputArr.shape[0]), counts)]

相关问题