也许numpy.tile 或numpy.repeat 可以帮助您。 tile 将数组作为一个整体重复,repeat 在元素方面起作用:
a3 = np.arange(3) # array([0, 1, 2])
a6t = np.tile(a, reps=2) # array([0, 1, 2, 0, 1, 2])
a6r = np.repeat(a, repeats=2) # array([0, 0, 1, 1, 2, 2])
通过这两种操作,您可以沿一个或多个轴重复您的数组以匹配另一个:
import numpy as np
arr = np.arange(12).reshape(4,3)
arr2 = np.arange(6).reshape(2,3)
arr2_t = np.tile(arr2, reps=(2, 1))
# array([[0, 1, 2],
# [3, 4, 5],
# [0, 1, 2],
# [3, 4, 5]])
arr2_r = np.repeat(arr2, repeats=2, axis=0)
# array([[0, 1, 2],
# [0, 1, 2],
# [3, 4, 5],
# [3, 4, 5]])
arr3 = arr - arr2_t
arr4 = arr * arr2_r
请注意这两个函数的调用签名略有不同。
一般:
-
tile 使用 reps (tuple) 指定每个轴的(可能不同的)重复次数
-
repeat 使用 repeats 指定沿 axis (int) 的每个元素应重复的频率,repeats 将被广播以适应轴
np.repeat(a=range(3), repeats=3) # array([0, 0, 0, 1, 1, 1, 2, 2, 2])
-
np.repeat(a=range(4), repeats=range(4) # array([1, 2, 2, 3, 3, 3])