将NumPy向量转换为2D数组/矩阵

时间:2015-11-02 15:20:54

标签: python arrays numpy

将矢量转换为二维数组的最佳方法是什么?

例如,大小为(10,)的向量b

a = rand(10,10)
b = a[1, :]
b.shape

Out: (10L,)

可以转换为大小为(10,1)的数组

b = b.reshape(len(b), 1)

有更简洁的方法吗?

4 个答案:

答案 0 :(得分:12)

由于在使用a[1, :]建立索引时丢失了维度,因此需要替换丢失的维度以维持2D形状。考虑到这一点,您可以使用以下语法进行选择:

b = a[1, :, None]

然后b具有所需的形状(10,1)。请注意,Nonenp.newaxis相同,并插入一个长度为1的新轴。

(这与编写b = a[1, :][:, None]相同,但只使用一个索引操作,因此可以节省几微秒。)

如果你想继续使用reshape(这也适用于此目的),值得记住你可以使用-1(最多)一个轴让NumPy找出什么相反,正确的长度应该是:

b.reshape(-1, 1)

答案 1 :(得分:6)

使用np.newaxis

In [139]: b.shape
Out[139]: (10,)

In [140]: b=b[:,np.newaxis]

In [142]: b.shape
Out[142]: (10, 1)

答案 2 :(得分:0)

您也可以使用np.asmatrix(b)

a.shape                 #--> (12,)
np.asmatrix(a).shape    #--> (1, 12)
np.asmatrix(a).T.shape  #--> (12, 1)

答案 3 :(得分:-1)

虽然这个问题很老了,但我觉得还是值得回答的。

使用这种风格:

b = a[1:2, :]