【问题标题】:Repeating each element of a numpy array 5 times重复 numpy 数组的每个元素 5 次
【发布时间】:2014-10-17 18:36:26
【问题描述】:
import numpy as np

data = np.arange(-50,50,10)
print data

[-50 -40 -30 -20 -10   0  10  20  30  40]

我想将数据的每个元素重复 5 次并创建新数组,如下所示:

ans = [-50 -50 -50 -50 -50 -40 -40 ... 40]

我该怎么做?

将整个数组重复 5 次怎么样?

ans =  [-50 -40 -30 -20 -10   0  10  20  30  40 -50 -40 -30 -20 -10   0  10  20  30  40 -50 -40 -30 -20 -10   0  10  20  30  40 -50 -40 -30 -20 -10   0  10  20  30  40 -50 -40 -30 -20 -10   0  10  20  30  40 .......]

【问题讨论】:

    标签: python arrays numpy repeat


    【解决方案1】:
    In [1]: data = np.arange(-50,50,10)
    

    要重复每个元素 5 次,请使用 np.repeat:

    In [3]: np.repeat(data, 5)
    Out[3]: 
    array([-50, -50, -50, -50, -50, -40, -40, -40, -40, -40, -30, -30, -30,
           -30, -30, -20, -20, -20, -20, -20, -10, -10, -10, -10, -10,   0,
             0,   0,   0,   0,  10,  10,  10,  10,  10,  20,  20,  20,  20,
            20,  30,  30,  30,  30,  30,  40,  40,  40,  40,  40])
    

    要重复数组 5 次,请使用 np.tile:

    In [2]: np.tile(data, 5)
    Out[2]: 
    array([-50, -40, -30, -20, -10,   0,  10,  20,  30,  40, -50, -40, -30,
           -20, -10,   0,  10,  20,  30,  40, -50, -40, -30, -20, -10,   0,
            10,  20,  30,  40, -50, -40, -30, -20, -10,   0,  10,  20,  30,
            40, -50, -40, -30, -20, -10,   0,  10,  20,  30,  40])
    

    但是请注意,有时您可以利用NumPy broadcasting 而不是创建包含重复元素的更大数组。

    例如,如果

    z = np.array([1, 2])
    v = np.array([[3], [4], [5]])
    

    然后添加这些数组来产生

     [[4 5]
      [5 6]
      [6 7]]
    

    你不需要使用磁贴:

    In [12]: np.tile(z, (3,1))
    Out[12]: 
    array([[1, 2],
           [1, 2],
           [1, 2]])
    
    In [13]: np.tile(v, (1,2))
    Out[13]: 
    array([[3, 3],
           [4, 4],
           [5, 5]])
    
    In [14]: np.tile(z, (3,1)) + np.tile(v, (1,2))
    Out[14]: 
    array([[4, 5],
           [5, 6],
           [6, 7]])
    

    相反,NumPy 会为您广播数组:

    In [15]: z + v
    Out[15]: 
    array([[4, 5],
           [5, 6],
           [6, 7]])
    

    【讨论】:

      【解决方案2】:

      只需使用np.repeat:

      In [5]: data.repeat(5)
      
      Out[5]: 
      array([-50, -50, -50, -50, -50, -40, -40, -40, -40, -40, -30, -30, -30,
             -30, -30, -20, -20, -20, -20, -20, -10, -10, -10, -10, -10,   0,
               0,   0,   0,   0,  10,  10,  10,  10,  10,  20,  20,  20,  20,
              20,  30,  30,  30,  30,  30,  40,  40,  40,  40,  40])
      

      【讨论】:

      • 将整个数组重复 5 次怎么样?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2020-02-17
      • 2016-02-16
      相关资源
      最近更新 更多