将 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/… 中比较reshape
和newaxis
。
我冒昧地编辑了标题和文字说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)。请注意,None
与 np.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 向量转换为二维数组/矩阵的主要内容,如果未能解决你的问题,请参考以下文章