np.tile & np.repeat

np.tile & np.repeat

np.tile 是将整个数组重复多次,np.repeat 是将数组中的每个元素重复。

np.tile

使用 np.tile(array, reps) 请尽量让 reps 为整数,或者使得 array 的维度和 reps 的尺寸一致,这样结果更加直观。

即:若 array 尺寸为 (2, 3, 4),则 reps 尽量为三元素向量形如 (1, 1, 2)

1
2
a = np.array([0, 1, 2])
np.tile(a, 2)
1
array([0, 1, 2, 0, 1, 2])
1
2
b = np.array([[0], [1], [2]])
np.tile(b, (2, 3))
1
2
3
4
5
6
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [0, 0, 0],
       [1, 1, 1],
       [2, 2, 2]])

np.repeat

axis=None

使用 numpy.repeat(a, reps, axis=None),若 axis=None 则一定返回压扁的一维向量

1
2
3
x = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(np.repeat(x, 2))
print(np.repeat(x, [2, 1, 3, 3, 1, 1, 1, 1]))
1
2
[1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8]
[1 1 2 3 3 3 4 4 4 5 6 7 8]

指定 axis

若指定 axis,必须让 reps 为整数,或者使得 array 该维的尺寸的和 reps 的尺寸一致,这样结果更加直观。

即:若 array 尺寸为 (2, 3, 4),axis=1,则改维度上尺寸为 3,reps 必须为三元素向量形如 (1, 1, 2)

1
print(np.repeat(x, 2, axis=0))
1
2
3
4
5
6
7
8
9
10
11
[[[1 2]
  [3 4]]

 [[1 2]
  [3 4]]

 [[5 6]
  [7 8]]

 [[5 6]
  [7 8]]]
1
print(np.repeat(x, 2, axis=1))
1
2
3
4
5
6
7
8
9
[[[1 2]
  [1 2]
  [3 4]
  [3 4]]

 [[5 6]
  [5 6]
  [7 8]
  [7 8]]]
1
print(np.repeat(x, 2, axis=2))
1
2
3
4
5
[[[1 1 2 2]
  [3 3 4 4]]

 [[5 5 6 6]
  [7 7 8 8]]]
1
print(np.repeat(x, (2, 1), axis=1))
1
2
3
4
5
6
7
[[[1 2]
  [1 2]
  [3 4]]

 [[5 6]
  [5 6]
  [7 8]]]