【问题标题】:Python: how to replicate the same row of a matrix?Python:如何复制矩阵的同一行?
【发布时间】:2018-11-09 17:46:46
【问题描述】:

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

【问题讨论】:

标签: python arrays numpy matrix


【解决方案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 将每一列多次连接到自身,然后将结果连接起来得到最终的数组。

【讨论】:

  • 不,我想复制行。因此,我想从您的矩阵中得出这种矩阵: [[s,r,e] [s,r,e] [s,r,e] [g,v,c] [g,v,c] [g,v,c] 等等。
  • 这不是您在问题和您提供给@Kerem 的评论中所说的
  • 是的,因为我不要求复制所有矩阵,而是复制每一行。
  • 这是一个相对简单的解决方法。但下次请在问题中包含示例输入和输出。
【解决方案2】:

您可以将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]])

【讨论】:

    【解决方案3】:
    v1=[3,2]
    v3=v1[:]*10
    print(v3)
    

    【讨论】:

    • 这将 [3,2] 连接 10 次 v1。我需要 [3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2]
    • 现在我正在使用 np.repeat(matrix[np.newaxis,:],10,0),但是 python 克隆矩阵十次,而不是每一行。
    【解决方案4】:

    np.repeat 正是您要找的。您可以使用axis 选项指定要复制行。

    B = np.repeat(A, 3, axis=0)

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多