我想知道如何将这个:array([0, 1, 2, 3, 4, 5])
转换为这个:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]])
简而言之,给定一个平面数组,将数组中的每个元素重复n次,以便每个元素创建包含n个相同元素的子数组,并将这些子数组连接成一个,以便每行包含原始数组中重复n次的一个元素。
我可以这样做:
def repeat(lst, n):
return [[e]*n for e in lst]
>repeat(range(10), 4)
[[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5],
[6, 6, 6, 6],
[7, 7, 7, 7],
[8, 8, 8, 8],
[9, 9, 9, 9]]
如何在NumPy中做到这一点?
你可以这样使用numpy的repeat
:
np.repeat(range(10), 4).reshape(10,4)
给了:
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]
[8 8 8 8]
[9 9 9 9]]
您可以使用tile
来处理尺寸:
a = np.array([0, 1, 2, 3, 4, 5])
N = 4
np.tile(a[:,None], (1, N))
# or
np.tile(a, (N, 1)).T
或broadcast_to
:
np.broadcast_to(a, (N, a.shape[0])).T
# or
np.broadcast_to(a[:,None], (a.shape[0], N))
或者乘以一个1数组:
a[:,None]*np.ones(N, dtype=a.dtype)
输出:
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5]])