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)维数组完美!这就是我要找的。非常感谢。