如何复制数组的每一行 n 次?
因此,如果我有一个2x3
数组,并且每行复制3次,我将有一个6x3
数组。例如,我需要将下面的A
转换为B
:
A = np.array([[1, 2, 3],
[4, 5, 6]])
B = np.array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6]])
如果可能,我想避免出现for
循环。
答案 0 :(得分:1)
如果我没看错,假设您以mat
开始,这可能就是您想要的:
transformed = np.concatenate([np.vstack([mat[:, i]] * 3).T for i in range(mat.shape[1])], axis=1)
这是一个可验证的示例:
# mocking a starting array
import string
mat = np.random.choice(list(string.ascii_lowercase), size=(5,3))
>>> mat
array([['s', 'r', 'e'],
['g', 'v', 'c'],
['i', 'b', 'd'],
['f', 'g', 's'],
['o', 'm', 'w']], dtype='<U1')
转换它:
# this repeats it 3 times for sake of displaying
transformed = np.concatenate([np.vstack([mat[i, :]] * 3).T for i in range(mat.shape[0])], axis=1).T
>>> transformed
array([['s', 'r', 'e'],
['s', 'r', 'e'],
['s', 'r', 'e'],
['g', 'v', 'c'],
['g', 'v', 'c'],
['g', 'v', 'c'],
['i', 'b', 'd'],
['i', 'b', 'd'],
['i', 'b', 'd'],
['f', 'g', 's'],
['f', 'g', 's'],
['f', 'g', 's'],
['o', 'm', 'w'],
['o', 'm', 'w'],
['o', 'm', 'w']], dtype='<U1')
这样的想法是使用vstack多次将每一列连接到自身,然后将其结果连接起来以获得最终数组。
答案 1 :(得分:1)
您可以将np.repeat
与整数位置索引一起使用:
B = A[np.repeat(np.arange(A.shape[0]), 3)]
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6]])
答案 2 :(得分:0)
v1=[3,2]
v3=v1[:]*10
print(v3)
答案 3 :(得分:0)
np.repeat
正是您想要的。您可以使用axis
选项来指定要复制的行。
B = np.repeat(A, 3, axis=0)