【问题标题】:Creating numpy array with a specific pattern创建具有特定模式的 numpy 数组
【发布时间】:2022-11-03 00:01:35
【问题描述】:

我正在尝试创建一个 numpy 整数数组升序整数(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,这会变得非常慢。 有什么建议么?

【问题讨论】:

  • np.repeat([1, 2, 3, 4], [1, 2, 3, 4])
  • 是的,谢谢。

标签: python numpy optimization


【解决方案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])

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 1970-01-01
      • 2019-04-08
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2015-05-03
      相关资源
      最近更新 更多