np.tile()和np.repeat()都可以对array进行重复操作,
但np.tile()是以axis为最小单位(axis-wise)进行重复的,
而np.repeat()是以element为最小单位(element-wise)进行重复的
(这段参考:np.tile()和np.repeat()_littlehaes的博客-CSDN博客)
numpy.tile(A, reps) # 来自于官方文档
### Construct an array by repeating A the number of times given by reps.
官方文档: numpy.tile — NumPy v1.23 Manual
输入:
A:np.ndarray,
reps:对应的英文单词为repeats,是个list,reps表示对A的各个axis进行重复的次数
返回:
返回一个数组,维度的数量等于max(A.ndim, len(reps)),注意不要混淆A.ndim和A.shape
例子1、
a = np.array([0, 1, 2])
np.tile(a, 2)
返回:
array([0, 1, 2, 0, 1, 2])
np.tile(a, (2, 2))
返回:
array([[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]])
np.tile(a, (2, 1, 2))
返回:
array([[[0, 1, 2, 0, 1, 2]],
[[0, 1, 2, 0, 1, 2]]])
例子2、
b = np.array([[1, 2], [3, 4]])
np.tile(b, 2) # 根据上面的解释,就是[2]广播成了[1, 2]
返回:
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
np.tile(b, (2, 1))
返回:
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
例子3、
c = np.array([1,2,3,4])
np.tile(c,(4,1))
返回:
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
numpy.repeat(a, repeats, axis=None) # 来自官方文档
#### Repeat elements of an array. (这里可以看出repeat()的最小单位的确是element)
官方文档:numpy.repeat — NumPy v1.23 Manual
输入:
a:数组(Input array.)
repeats:各个元素重复的次数, 在axis的方向上进行重复。
(repeats is broadcasted to fit the shape of the given axis.:repeats会自动进行广播)
axis:指定沿着哪个轴进行repeat。不指定axis的情况下,会将输入的a数组进行flatten,然后在flatten后的数组上进行repeat。
例子1、
np.repeat(3, 4)
返回:
array([3, 3, 3, 3])
x = np.array([[1,2],[3,4]])
np.repeat(x, 2)
返回:
array([1, 1, 2, 2, 3, 3, 4, 4])
x = np.array([[1,2],[3,4]])
np.repeat(x, 3, axis=1)
返回:
array([[1, 1, 1, 2, 2, 2],
[3, 3, 3, 4, 4, 4]])
例子2、
x = np.array([[1,2],[3,4]])
np.repeat(x, [1, 2], axis=0)
返回:
array([[1, 2],
[3, 4],
[3, 4]])
这个比较特殊:
其是再axis=0这个维度(即,行这个维度)上,第一行重复1次,第二行重复2次。
例子3、
这个用的比较多一些
使用np.tile()会更简单一些
x = np.array([[1,2,3,4]]) # 必须将其变成shape为(1, n),即必须增加1这个维度
np.repeat(x, [3], axis=0)
返回:
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])