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

6
我在想是否有一个函数,可以将列表X作为输入,并输出对应于X的列向量?
(我查看了一些资料,怀疑这个函数可能是:np.matrix(X).T

你正在使用numpy吗? - Mad Physicist
是的,我正在使用numpy。 - user9628064
np.reshape(X, (len(X), 1)) - It'll also accept X even if it's a list or tuple - dROOOze
2
@drooze。这里使用-1可能比len(X)更容易。 - Mad Physicist
@Mkach。我已经编辑了你的标签以反映这一点。这是一个非常常见的问题,所以我很高兴你问了它。它可能是一个重复的问题,但我太懒了,所以只是发布了一个答案。 - Mad Physicist
基本点是np.array([1,2,3,4])创建了一个一维数组,形状为(4,)。通常这已经足够了。列向量的形状为(4,1)。有很多方法可以将该维度添加到一维数组中。 - hpaulj
4个回答

10

我认为没有一个函数可以实现,但是有一个专门的对象np.c_

>>> X = list('hello world')
>>> X
['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

6

如果你想将一个Python列表转换成numpy列向量,你可以使用array构造函数的ndmin参数:

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)

即使是原始列表也可以正常工作。

附言:远离 np.matrix,它非常过时且有限,如果不是被明确弃用的话。


0

列表是 Python 的内置类型,而 numpy 数组则是 numpy 对象。您需要先将列表转换为 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)

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


2
正如你所猜测的那样,转置操作不会正确执行。当没有两个维度可以交换时,你无法交换两个维度。 - Mad Physicist

0

相似但不同:

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

方法1:

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

输出:

array([[2],
       [3],
       [4],
       [5],
       [6]])

方法2:

np.array(mylist).reshape(len(mylist),1)

output:
    array([[2],
           [3],
           [4],
           [5],
           [6]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接