在numpy中将向量组合为列矩阵

时间:2014-12-16 20:22:58

标签: python numpy matrix

我有3个向量,如下所示:

a = np.ones(20)
b = np.zeros(20)
c = np.ones(20)

我正在尝试将它们组合成一个维度为20x3的矩阵。

目前我在做:

n1 = np.vstack((a,b))
n2 = np.vstack((n1,c)).T

这有效,但是有没有办法以列方式填充数组矩阵?

2 个答案:

答案 0 :(得分:3)

有几种不同的方法可以做到这一点。以下是一些例子:

使用np.c_

np.c_[a, b, c]

使用np.dstacknp.squeeze

np.dstack((a, b, c)).squeeze()

使用np.vstack并转置(与您的方法类似):

np.vstack((a,b,c)).T

使用np.concatenatereshape

np.concatenate((a, b, c)).reshape((-1, 3), order='F')

如果效率在这里很重要,那么使用np.concatenate的最后一种方法似乎是我计算机上最快的方法:

>>> %timeit np.c_[a, b, c]
10000 loops, best of 3: 46.7 us per loop

>>> %timeit np.dstack((a, b, c)).squeeze()
100000 loops, best of 3: 18.2 us per loop

>>> %timeit np.vstack((a,b,c)).T
100000 loops, best of 3: 17.8 us per loop

>>> %timeit np.concatenate((a, b, c)).reshape((-1, 3), order='F')
100000 loops, best of 3: 3.41 us per loop

答案 1 :(得分:1)

是的,请使用column_stack

np.column_stack((a,b,c))

适用于堆叠一般的1-d阵列。在您需要20x3数组的特定情况下,每行都是(1,0,1),我建议:

np.tile([1.,0.,1.], (20,1))