2015-11-02 163 views
3

将矢量转换为二维数组的最佳方式是什么?将NumPy矢量转换为二维数组/矩阵

例如,大小的矢量b(10,)

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

Out: (10L,) 

可以作为

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

转换为大小(10,1)的阵列是否有一个更简洁的方式来做它?

+2

'(10,1)'是一个二维数组。 – hpaulj

+0

@hpaulj我猜OP意味着“将1d numpy数组转换为列向量”... –

+1

在http://stackoverflow.com/questions/28385666/numpy-use-reshape-or-newaxis-to-add-dimensions比较和对比'重塑'和'新轴'。 – hpaulj

回答

3

使用np.newaxis

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

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

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

请考虑编辑您的帖子以添加更多关于您的代码的解释以及为什么它可以解决问题。一个主要包含代码的答案(即使它正在工作)通常不会帮助OP了解他们的问题。 – SuperBiasedMan

+0

@SuperBiasedMan - OP不要求理解,只是一个更简洁的表达式。我不确定可以再解释OP的“重塑”版本。这是'np.newaxis'变量的基本用法。 – hpaulj

+1

@SuperBiasedMan我同意,代码只回答**通常**不会帮助。但正如hpaulj所说:这里没有太多的解释,上面的三个命令是不言自明的。 (看看我的其他答案,我总是试图解释我的答案,如果有必要的话)。 –

7

既然你a[1, :]索引时失去了尺寸,丢失的维度需要被更换,以保持二维形状。考虑到这一点,你可以使用语法进行选择:

b = a[1, :, None] 

然后b具有所需形状(10,1)。需要注意的是None相同np.newaxis并插入长度的新轴1

(这是同样的事情,写作b = a[1, :][:, None]但只使用一个索引操作,从而节省了几微秒)。

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

b.reshape(-1, 1) 
+0

我会补充说''.reshape'不是* inplace *操作,所以它应该是'b = b.reshape(-1,1)'或* inplace *版本'b.shape =(-1,1)'。 –