Python 如何从nesteld列表中获取三维numpy数组

Python 如何从nesteld列表中获取三维numpy数组,python,arrays,list,numpy,Python,Arrays,List,Numpy,我有一个汽车列表,想把它转换成一个多维数组 >>> cars = [[[2,1],[1,1]],[[0,2],[0,1],[0,0]],[[5,0],[5,1],[5,2]],[[1,5],[2,5]]] >>> cars_np = np.array(cars) >>> cars_np.shape (4,) >>> cars_np array([list([[2, 1], [1, 1]]), list([[0, 2], [0

我有一个汽车列表,想把它转换成一个多维数组

>>> cars = [[[2,1],[1,1]],[[0,2],[0,1],[0,0]],[[5,0],[5,1],[5,2]],[[1,5],[2,5]]]
>>> cars_np = np.array(cars)
>>> cars_np.shape
(4,)
>>> cars_np
array([list([[2, 1], [1, 1]]), list([[0, 2], [0, 1], [0, 0]]),
       list([[5, 0], [5, 1], [5, 2]]), list([[1, 5], [2, 5]])],
      dtype=object) # an array of lists is not what i want
>>> cars_np = np.array([np.array(car) for car in cars])
>>> cars_np.shape
(4,)
>>> cars_np
array([array([[2, 1],
       [1, 1]]),
       array([[0, 2],
       [0, 1],
       [0, 0]]),
       array([[5, 0],
       [5, 1],
       [5, 2]]),
       array([[1, 5],
       [2, 5]])], dtype=object) # an array of arrays is not what i want
使用此列表可以很好地工作:

>>> l = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
>>> l_np = np.array(l)
>>> l_np.shape
(2, 2, 2) # multidimensional array as expected

我与第一个示例有什么关系?

numpy数组必须具有定义良好的形状,例如最后一个示例中的
(2,2,2)
。您的列表
cars
是一个列表列表,其中内部列表的长度
2,3,3,2
,这与numpy定义良好的形状不一致

我建议您在
cars
列表中添加一些NaN值,使所有长度为3的内部列表:

cars = [[[2,1],[1,1],[np.nan,np.nan]], [[0,2],[0,1],[0,0]], [[5,0],[5,1],[5,2]], [[1,5],[2,5],[np.nan,np.nan]]]
np.array(cars).shape
>>>  (4, 3, 2)

这很可能是你正在寻找的行为。NaN值可以使用函数
np进行过滤。isnan
的行为不应该像常规有效值那样,这将使它们易于处理。

您希望的形状是什么?我不确定三维在汽车示例中的物理意义。但是,例如,三维用于颜色像素-x、y和RGB颜色值的元组,因此
[[r、g、b],[[r、g、b],[[r、g、b],[r、g、b]]
其中r、g、b是颜色值。这个数组的形状是(2,2,3)。一个(4,3,2)维数组完美!这就是我要找的。非常感谢。