创建具有特定图案的NumPy数组

gdrx4gfi  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(107)

我正在尝试创建一个整数数组,递增整数(1,2,3,...),这样n就会重复n次。例如,对于最大值4,我想要

my_arr = [1,2,2,3,3,3,4,4,4,4]

现在,使用for循环很容易做到这一点

my_arr = numpy.array([])
max = 4
for i in range(1,max + 1):
    my_arr = numpy.append(my_arr,np.ones(i)*i)

但对于大数max,这会变得非常慢。有什么建议吗?

bz4sfanl

bz4sfanl1#

使用np.repeat

import numpy as np

def pattern(n):
    x = np.arange(1, n + 1)
    return np.repeat(x, x)

# >>> pattern(4)

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

atmip9wb2#

有一种内在的方法可以做到这一点。

import numpy as np

def builtinway(maxval=10):
    arr = list(range(1, maxval+1))
    return np.repeat(arr, arr)

一种快速而直接地完成此操作的方法如下。在实践中,在手术数量增长过快之前,空间就会成为一个问题。(尽管在实践中,您可能不会这样做)。

def make_arr(maxval=10):
    arrlen = maxval * (maxval + 1) // 2
    arr = np.ones(arrlen)
    for i in range(2, maxval+1):
        addend = np.ones(arrlen)
        addend[:i*(i-1) // 2] = 0
        arr += addend
    return arr

相关问题