如何在Numpy中将矩阵的每一行复制N次?

17

我有一个大小为(150,2)的矩阵,我想将每行复制N次。我用一个例子来说明我的意思。

输入:

a = [[2, 3], [5, 6], [7, 9]]
假设N=3,我想要这个输出:
[[2 3]
 [2 3]
 [2 3]
 [5 6]
 [5 6]
 [5 6]
 [7 9]
 [7 9]
 [7 9]]

谢谢。


2
你能否编辑一下你的样本数据?现在它并没有太多意义。 - Willem Van Onsem
我认为你的示例 a 应该是 a = [[2, 3], [5, 6], [7, 9]] - Warren Weckesser
我已经发布了一张图片,希望能够清晰地说明问题 :) a是一个列数组。 - ggg
3个回答

21

使用参数axis=0np.repeat

a = np.array([[2, 3],[5, 6],[7, 9]])

print(a)
[[2 3]
 [5 6]
 [7 9]]

r_a = np.repeat(a, repeats=3, axis=0)

print(r_a)
[[2 3]
 [2 3]
 [2 3]
 [5 6]
 [5 6]
 [5 6]
 [7 9]
 [7 9]
 [7 9]]

0
如果您的输入是向量,请先使用atleast_2d
a = np.atleast_2d([2, 3]).repeat(repeats=3, axis=0)
print(a)

# [[2 3]
#  [2 3]
#  [2 3]]

0

在NumPy中创建一个空的多维数组(例如,一个2D数组m*n用于存储矩阵),如果您不知道要添加多少行并且不关心Stephen Simmons提到的计算成本(即在每次添加时重新构建数组),则可以将要附加到的维度压缩为0:X = np.empty(shape=[0, n])

这样,您就可以使用例如(这里m = 5,我们假设在创建空矩阵时不知道,而n = 2):

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

这将给你:

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接