将numpy数组中的每个元素重复5次

41 投票
2 回答
36940 浏览
提问于 2025-04-18 18:21
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 .......]

2 个回答

7

简单来说,你可以使用 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])
66
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的广播功能,而不是创建一个包含重复元素的更大数组。

比如,如果

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

那么要把这些数组相加得到

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

你就不需要使用tile:

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

撰写回答