将矢量转换为二维数组的最佳方法是什么?
例如,大小为(10,)的向量b
a = rand(10,10)
b = a[1, :]
b.shape
Out: (10L,)
可以转换为大小为(10,1)的数组
b = b.reshape(len(b), 1)
有更简洁的方法吗?
答案 0 :(得分:12)
由于在使用a[1, :]
建立索引时丢失了维度,因此需要替换丢失的维度以维持2D形状。考虑到这一点,您可以使用以下语法进行选择:
b = a[1, :, None]
然后b
具有所需的形状(10,1)。请注意,None
与np.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, :]