将列表转换为Numpy的ndarray

5

I want to convert this list

li = [3, 2 , 1 , 4]

to the following NumPy ndarray

[[3], [2], [1], [4]]

我尝试使用np.asarray(),但它没有将其转换为ndarray。有没有办法提及轴?


1
np.asarray() 会产生什么,如果它不是 ndarray?我期望它会产生一个一维数组。 - hpaulj
1
昨天已经有人问过同样的问题:https://dev59.com/DKrka4cB1Zd3GeqPe4XB - hpaulj
1
可以说更通用的是,"有没有办法提到轴?" - Paul Panzer
同意@hpaulj的观点,同样的问题在https://dev59.com/DKrka4cB1Zd3GeqPe4XB中被问到。其中一个评论中有使用`np.reshape`的干净答案。 - Jack Chan
4个回答

2
您可以使用 numpy.expand_dims 来创建带有额外轴的数组。
>>> np.expand_dims(li, -1)
array([[3],
       [2],
       [1],
       [4]])

或者,如果您喜欢的话,在创建数组之后添加轴。
np.array(li)[..., np.newaxis]

2
"asarray"函数确实会生成一个"ndarray"数组:
In [41]: li = [3, 2 , 1 , 4]
In [42]: x = np.asarray(li)
In [43]: x
Out[43]: array([3, 2, 1, 4])
In [44]: type(x)
Out[44]: numpy.ndarray

为了产生额外的嵌套,您需要添加一个维度(以某种方式):
In [45]: np.asarray(li)[:,None]
Out[45]: 
array([[3],
       [2],
       [1],
       [4]])

昨天:在Python中将列表转换为列向量


1

您可以使用列表推导式来创建嵌套列表,然后使用numpy.array()将嵌套列表转换为Numpy ndarray。

>>> import numpy as np
>>> li = [3, 2, 1, 4]

>>> np.array([[x] for x in li])    
[[3]
 [2]
 [1]
 [4]]

0

我相信最短的是

np.c_[li]
# array([[3],
#        [2],
#        [1],
#        [4]])

关于一般的尺寸和轴:

dummy, ndim, axis = 0, 4, 2
np.r_[f'{dummy},{ndim},{axis}', li]
# array([[[[3],
#          [2],
#          [1],
#          [4]]]])
_.shape
# (1, 1, 4, 1)

另一个例子:

dummy, ndim, axis = 0, 3, 0
np.r_[f'{dummy},{ndim},{axis}', li]
# array([[[3]],
#        [[2]],  
#        [[1]],
#        [[4]]])
_.shape
# (4, 1, 1)

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