我正在尝试创建一个整数数组,递增整数(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,这会变得非常慢。有什么建议吗?
max
bz4sfanl1#
使用np.repeat:
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])
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
2条答案
按热度按时间bz4sfanl1#
使用
np.repeat
:atmip9wb2#
有一种内在的方法可以做到这一点。
一种快速而直接地完成此操作的方法如下。在实践中,在手术数量增长过快之前,空间就会成为一个问题。(尽管在实践中,您可能不会这样做)。