Python:如何复制矩阵的同一行?

时间:2018-11-09 17:46:46

标签: python arrays numpy matrix

如何复制数组的每一行 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循环。

4 个答案:

答案 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)