正在创建具有特定模式的numpy数组



我正试图创建一个由整数升序(1,2,3,…(组成的numpy数组,这样n就重复了n次。例如,对于最大数量4,我想要

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

现在使用for loop 很容易

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

但是对于大量的CCD_ 1来说,这变得非常慢。有什么建议吗?

使用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])

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

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