将 NumPy 向量转换为二维数组/矩阵

Posted

技术标签:

【中文标题】将 NumPy 向量转换为二维数组/矩阵【英文标题】:Convert NumPy vector to 2D array / matrix 【发布时间】:2016-02-02 12:50:31 【问题描述】:

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

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

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

Out: (10L,)

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

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

有更简洁的方法吗?

【问题讨论】:

(10,1) 是一个二维数组。 @hpaulj 我猜 OP 的意思是“将 1d numpy 数组转换为列向量”... 在***.com/questions/28385666/… 中比较reshapenewaxis 我冒昧地编辑了标题和文字说2d 【参考方案1】:

我认为最清晰的方法是使用np.expand_dims,它基本上为数组添加了一个轴。如果您使用axis=-1,则会添加一个新轴作为最后一个维度。

b = np.expand_dims(b, axis=-1)

或者如果你想让我更简洁:

b = np.expand_dims(b, -1)

【讨论】:

【参考方案2】:

虽然这个问题很老,但我认为仍然值得回答。

使用这种风格:

b = a[1:2, :]

【讨论】:

这将没有形状(10, 1)【参考方案3】:

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

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

【讨论】:

它返回矩阵并据此:***.com/a/61156350 矩阵将在未来被弃用。【参考方案4】:

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

b = a[1, :, None]

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

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

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

b.reshape(-1, 1)

【讨论】:

我要补充一点,.reshape 不是 inplace 操作,所以它应该是 b = b.reshape(-1, 1)inplace 版本 b.shape = (-1, 1) .【参考方案5】:

使用np.newaxis:

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

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

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

【讨论】:

请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。 @SuperBiasedMan - OP 并不要求理解,只是要求更简洁的表达方式。我不确定它是否可以解释为 OP 的reshape 版本可以。这是np.newaxis 变量的基本用法。 @SuperBiasedMan 我同意,只有代码的答案通常不会有帮助。但正如 hpaulj 所说:这里没有太多解释,上面的三个命令是不言自明的。 (看看我的其他答案,如果有必要,我总是会尝试解释我的答案的作用)。 我知道没有这样的义务,但我仍然希望对否决票的性质发表评论。 (除非是 SuperBiasedMan,否则我知道评论)

以上是关于将 NumPy 向量转换为二维数组/矩阵的主要内容,如果未能解决你的问题,请参考以下文章

numpy矩阵和数组的区别

将二维向量转换为二维数组

numpy笔记

如何将静态二维数组转换为特征值

将简单数组转换为二维数组(矩阵)

将 Pandas 系列的二维 numpy 数组转换为一维 numpy 数组列的 Pandas DataFrame