np.tile()和np.repeat()

np.tile()和np.repeat()都可以对array进行重复操作,但np.tile()是以axis为最小单位(axis-wise)进行重复的,而np.repeat()是以element为最小单位(element-wise)进行重复的

np.tile(A,reps)

输入: A是数组,reps是个list,reps的元素表示对A的各个axis进行重复的次数
返回: 一个数组,维度的数量等于max(A.ndim,len(reps)),注意不要混淆A.ndim和A.shape
有两种特殊情况:

  1. A.ndim < len(reps), 此时需要调整A的维度使得A.ndim = len(reps),即添加长度为1的维度,注意:新的维度在原维度的前面,比如原来的A.shape是(3,5),调整后是(1,3,5)
  2. A.ndim > len(reps), 此时需要增加list的长度,使得A.ndim = len(reps),即在reps的最前面增加元素1,比如原来的list是[2,2],增加长度后是[1,2,2]

官方示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 示例1,正常情况
a = np.array([0, 1, 2])
# 将axis=0重复2次
np.tile(A=a, reps=2)
# array([0, 1, 2, 0, 1, 2])

# 示例2,特殊情况1:A.ndim < len(reps)
a = np.array([0, 1, 2])
# 将a.shape调整至(1,3),然后将axis=0重复2次,将axis=1重复2次
np.tile(A=a, reps=(2, 2))
#array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]])

# 示例3,特殊情况1:A.ndim < len(reps)
a = np.array([0, 1, 2])
# 将a.shape调整至(1,1,3),然后将axis=0重复2次,将axis=1重复1次,将axis=2重复2次
np.tile(A=a, reps=(2, 1, 2))
#array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]])

# 示例4,特殊情况2:A.ndim > len(reps)
b = np.array([[1, 2], [3, 4]])
# 将reps=[2]调整至[1,2],然后将axis=0重复1次,将axis=1重复2次
np.tile(A=b, reps=2)
#array([[1, 2, 1, 2], [3, 4, 3, 4]])

# 示例5,正常情况
b = np.array([[1, 2], [3, 4]])
# 将axis=0重复两次,将axis=1重复1次
np.tile(A=b, reps=(2, 1))
#array([[1, 2], [3, 4], [1, 2], [3, 4]])

# 示例6,特殊情况1:A.ndim < len(reps)
c = np.array([1,2,3,4])
# 将c.shape调整至(4,1),然后将axis=0重复4次,将axis=1重复1次
np.tile(A=c, reps=(4,1))
# array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]])

np.repeat(a, repeats, axis=None)

输入: a是数组,repeats是各个元素重复的次数(repeats一般是个标量,稍复杂点是个list),在axis的方向上进行重复
返回: 如果不指定axis,则将重复后的结果展平(维度为1)后返回;如果指定axis,则不展平
官方示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例1,展平
# 将3重复4次
np.repeat(a=3, repeats=4)
# array([3, 3, 3, 3])

# 示例2,展平
# 每个元素都重复2次,并展平后输出
x = np.array([[1,2],[3,4]])
np.repeat(a=x, repeats=2)
# array([1, 1, 2, 2, 3, 3, 4, 4])

#示例3,不展平
x = np.array([[1,2],[3,4]])
# 沿着axis=1方向重复,将axis=1方向上的每个元素重复3次
np.repeat(a=x, repeats=3, axis=1)
#array([[1, 1, 1, 2, 2, 2], [3, 3, 3, 4, 4, 4]])

#示例3,不展平
x = np.array([[1,2],[3,4]])
# 沿着axis=0方向重复,将axis=0方向上的第0个元素重复1次,第1个元素重复2次
np.repeat(a=x, repeats=[1, 2], axis=0)
# array([[1, 2], [3, 4], [3, 4]])

0%