在 NumPy 中将行向量转换为列向量

Posted

技术标签:

【中文标题】在 NumPy 中将行向量转换为列向量【英文标题】:Convert row vector to column vector in NumPy 【发布时间】:2013-07-11 11:13:43 【问题描述】:
import numpy as np

matrix1 = np.array([[1,2,3],[4,5,6]])
vector1 = matrix1[:,0] # This should have shape (2,1) but actually has (2,)
matrix2 = np.array([[2,3],[5,6]])
np.hstack((vector1, matrix2))

ValueError: all the input arrays must have same number of dimensions

问题是,当我选择 matrix1 的第一列并将其放入 vector1 时,它会转换为行向量,因此当我尝试与 matrix2 连接时,会出现尺寸错误。我可以这样做。

np.hstack((vector1.reshape(matrix2.shape[0],1), matrix2))

但是每次我必须连接一个矩阵和一个向量时,这看起来太难看了。有没有更简单的方法来做到这一点?

【问题讨论】:

【参考方案1】:

子集

更简单的方法是对矩阵进行子集化。

>>> matrix1
[[1 2 3]
 [4 5 6]]

>>> matrix1[:, [0]] # Subsetting
[[1]
 [4]]

>>> matrix1[:, 0] # Indexing
[1 4]

>>> matrix1[:, 0:1] # Slicing
[[1]
 [4]]

我也在一个类似的问题中mentioned这个。

它的工作方式有点类似于 Pandas 数据框。如果你索引数据框,它会给你一个系列。如果您对数据框进行子集化或切片,它会为您提供一个数据框

您的方法使用 indexing,David Z's approach 使用 slicing,而我的方法使用 subsetting

【讨论】:

【参考方案2】:

这里有其他三个选项:

    您可以通过允许隐式设置向量的行维度来稍微整理一下您的解决方案:

    np.hstack((vector1.reshape(-1, 1), matrix2))
    

    您可以使用np.newaxis(或等效的None)索引以插入大小为 1 的新轴:

    np.hstack((vector1[:, np.newaxis], matrix2))
    np.hstack((vector1[:, None], matrix2))
    

    你可以使用np.matrix,用整数索引列总是返回一个列向量:

    matrix1 = np.matrix([[1, 2, 3],[4, 5, 6]])
    vector1 = matrix1[:, 0]
    matrix2 = np.matrix([[2, 3], [5, 6]])
    np.hstack((vector1, matrix2))
    

【讨论】:

【参考方案3】:

更简单的方法是

vector1 = matrix1[:,0:1]

原因,我推荐你another answer of mine:

当您编写a[4] 之类的内容时,这是在访问数组的第五个元素,而不是让您查看原始数组的某些部分。例如,如果 a 是一个数字数组,那么 a[4] 将只是一个数字。如果a 是一个二维数组,即实际上是一个数组数组,那么a[4] 将是一个一维数组。基本上,访问数组元素的操作会返回比原始数组少一维的东西。

【讨论】:

类似地,切片返回与原始数组具有相同维度(或 numpy 术语中的排名)的东西

以上是关于在 NumPy 中将行向量转换为列向量的主要内容,如果未能解决你的问题,请参考以下文章

如何将向量重新排列为列而不是行?

python 将3D数组转换为列向量

如何在 C++ 中将一组整数转换为 3D 向量?

如何在初始化期间将 std::initializer_list 转换为列矩阵或列向量?

在实体框架中将行转换为列

在R中将行转换为列