在Python中把列表转换为列向量

4 人关注

我在想,是否有一个函数将列表 X 作为输入,并输出一个与 X 对应的列向量?

(我看了一下,我怀疑可能是: np.matrix(X).T )

5 个评论
你在使用numpy吗?
是的,我正在使用numpy
np.reshape(X, (len(X), 1)) - It'll also accept X even if it's a list or tuple
@drooze.-1可能比这里的len(X)更容易。
@Mkach。我已经编辑了你的标签以反映这一点。这是个很常见的问题,所以我很高兴你问了这个问题。这可能是一个重复的问题,但我懒得去看,所以只是贴了一个答案来代替。
python
numpy
transpose
user9628064
user9628064
发布于 2018-04-11
4 个回答
Paul Panzer
Paul Panzer
发布于 2019-07-21
已采纳
0 人赞同

我不认为有一个函数,但有一个专门的对象, np.c_

>>> X = list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
np.c_[X]
array([['h'],
       ['e'],
       ['l'],
       ['l'],
       ['o'],
       [' '],
       ['w'],
       ['o'],
       ['r'],
       ['l'],
       ['d']], dtype='<U1')

你也可以这样做(注意额外的方括号)

>>> np.array([X]).T
    
Mad Physicist
Mad Physicist
发布于 2019-07-21
0 人赞同

如果你想把Python列表转换为numpy列向量,你可以使用 ndmin 参数到 array 指挥器。

col_vec = np.array(X, ndmin=2)

简单地构建一个数组会得到一个一维数组,它不能被直接转置。

a = np.array(X)
a is a.T

不过,有几种方法可以将一维矢量转化为列。

col_vec = a.reshape(-1, 1)
col_vec = a[np.newaxis, :]

是在你的列表已经是一个数组之后相当常见的习语。

col_vec = np.reshape(X, (-1, 1))
col_vec = np.expand_dims(X, -1)

即使在原始列表上也会起作用。

P.S. Stay away from np.matrix it's very outdated 和 limited, if not outright deprecated.

JahKnows
JahKnows
发布于 2019-07-21
0 人赞同

list 是 Python 的一种本地类型,而 numpy 数组是 numpy 对象。你将需要首先把你的 list 转换为 numpy 数组。你可以做类似下面的事情。

x = list(range(5))
print(x)
  

[0, 1, 2, 3, 4]

x_vector = np.asarray(x)
  

数组([0, 1, 2, 3, 4])

现在,Python不知道行向量和列向量之间有什么区别,这取决于你如何使用这个向量。当前的向量是1x5。如果你想要5x1,你可以通过以下两种方式进行转置

x_vector.T
np.transpose(x_vector)

然而,由于这是一个一维矩阵,转置与内存中的非转置向量相同。

正如你所猜测的,转置不会正确工作。你不能在没有两个尺寸可以交换的情况下交换两个尺寸。
Grant Shannon
Grant Shannon
发布于 2019-07-21
0 人赞同

相似但不同。

mylist=[2,3,4,5,6]

method1:

np.array([[i] for i in mylist])

output:

array([[2],
       [6]])

method 2:

np.array(mylist).reshape(len(mylist),1)
output:
    array([[2],