【问题标题】:Python Numpy repeating an arange arrayPython Numpy 重复一个范围数组
【发布时间】:2017-05-06 09:06:58
【问题描述】:

所以说我这样做

x = np.arange(0, 3)

给了

array([0, 1, 2])

但我能做什么

x = np.arange(0, 3)*repeat(N=3)times

得到

array([0, 1, 2, 0, 1, 2, 0, 1, 2])

【问题讨论】:

    标签: arrays numpy repeat numpy-ndarray


    【解决方案1】:

    编辑:请参阅下面的 hpaulj 的回答。坦率地说,它更好。

    最简单的方法是转换回列表并使用:

    list(np.arange(0,3))*3
    

    这给出了:

    >> [0, 1, 2, 0, 1, 2, 0, 1, 2]
    

    或者如果你想要它作为一个numpy 数组:

    np.array(list(np.arange(0,3))*3)
    

    这给出了:

    >> array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    

    【讨论】:

    • 我认为这种方式比使用for 循环更容易。
    • 如何重复不同的次数?例如 a = np.arange(4) => 0,1,2,3 np.magic_function(a, [4,3,2]) => 0,1,2,3,0,1,2,0 ,1
    【解决方案2】:

    我最近看到了几个关于 resize 的问题。它不经常使用,但这里有一种情况,它可以满足您的需求:

    In [66]: np.resize(np.arange(3),3*3)
    Out[66]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    

    还有很多其他方法可以做到这一点。

    In [67]: np.tile(np.arange(3),3)
    Out[67]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    In [68]: (np.arange(3)+np.zeros((3,1),int)).ravel()
    Out[68]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    

    np.repeat 不会以我们想要的方式重复

    In [70]: np.repeat(np.arange(3),3)
    Out[70]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])
    

    但即使这样也可以重做(这有点高级):

    In [73]: np.repeat(np.arange(3),3).reshape(3,3,order='F').ravel()
    Out[73]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    

    【讨论】:

    • 很好的答案,但我接受了另一个答案,因为你擅长用 python 编程,而另一个人需要接受一些答案才能赶上你的特殊统计数据!但是感谢您的帮助:-)
    • 我认为resize 是原始问题的确切答案
    • @RunnerBean 感谢您的分数,但概率应该已经给 hpaulj。这样其他人也能知道最佳答案!
    【解决方案3】:

    这个怎么样?

    arr = np.arange(3)
    res = np.hstack((arr, ) * 3)
    

    输出

    array([0, 1, 2, 0, 1, 2, 0, 1, 2])
    

    我想说的开销并不大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-28
      • 2020-12-18
      • 2016-04-02
      • 2018-07-31
      • 1970-01-01
      • 2018-10-25
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多