以快速矢量化的方式在numpy / pandas中生成重复数据

时间:2014-05-08 13:54:24

标签: python numpy pandas

假设我想生成这样的一维数组:

1 1 1 1 2 2 2 3 3 4

一般来说,我正在寻找这种形式的东西:

Element     N-repetition
1           n-0
2           n-1
3           n-2
4           n-3
.           .
.           .
.           .
n           n-(n-1)=1

这当然可以通过组合数组来实现 尺寸n,n-1,n-2,...,但我想知道是否有 这是一种更好的,矢量化的方式吗?

2 个答案:

答案 0 :(得分:5)

与Numpy的repeat

非常简单
n = 4
a = np.arange(1,n+1)

数组a如下所示:

array([1, 2, 3, 4])

你基本上想要以a的反面重复它,所以:

np.repeat(a, a[::-1])

给出:

array([1, 1, 1, 1, 2, 2, 2, 3, 3, 4])

答案 1 :(得分:1)

我自己想出了一些东西,但这有点复杂:

def makegenarr(n):
    def genarr(x):
        return np.repeat(x, n-(x-1))
    return(genarr)

x = np.arange(1, 5)
mapfunc = makegenarr(x.shape[0])
np.apply_along_axis(genarr, 0, x)