如何将多个向量连接成一个矩阵(每个向量是新矩阵的一列)?

3
我有4个长度为256的向量(numpy.ndarray类型),我希望创建一个新的矩阵,其中每一列对应于一个向量。因此,在连接后,我将得到一个256 * 4的矩阵。
我尝试使用hstack或np.concatenate方法,但是我没有得到想要的结果。
提前致谢。
1个回答

1
使用 vstack 和转置 T
n = 256
a = np.arange(n) + 0
b = np.arange(n) + 1
c = np.arange(n) + 2
d = np.arange(n) + 3

x = np.vstack([a,b,c,d]).T
x

输出:

array([[  0,   1,   2,   3],
       [  1,   2,   3,   4],
       [  2,   3,   4,   5],
       ...,
       [253, 254, 255, 256],
       [254, 255, 256, 257],
       [255, 256, 257, 258]])

或者,另外一种方法是使用 column_stack 方法:

x = np.column_stack([a,b,c,d])

如果你想将它作为实际的矩阵而不是ndarray获取:

m = np.matrix([a,b,c,d]).T

更新:如果要使用循环来完成,您可以将数组收集到列表中,然后将它们堆叠在一起:

n = 256
l = []
for i in range(4):
    l.append(np.arange(n) + i)

x = np.vstack(l).T
x

或者,另一种方法是在循环的每个步骤中逐个堆叠它们,然后在循环后进行转置:
n = 256
x = np.arange(n)
for i in range(1,4):
    x = np.vstack([x, np.arange(n) + i])

x = x.T
x

1
np.stack也可以使用(带有axis=1)。它们都做同样的事情-扩展所有输入的维度,并连接起来。 - hpaulj
嗨@perl,你能给我一个例子,在for循环中如何执行这个操作吗?即如何连接因为我想用不同长度做相同的过程..例如,如果我想要10列,则x = np.vstack([a1, a1, ..., a10]).T - Er1Hall
@Er1Hall:好的,请查看我的回答中的更新部分。 - perl
重复使用 vstack 会降低速度。 - hpaulj
是的,我也计时了,并将性能更好的选项放在首位。然而,我还包括了第二个选项,以防 OP 对在循环内部操作矩阵感兴趣。 - perl

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