Как я могу получить 3-мерный массив numpy из списка Nesteld списка - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть список автомобилей и я хочу преобразовать его в многомерный массив

>>> 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

что мне нужно сделать с первым примером?

1 Ответ

1 голос
/ 27 апреля 2020

numpy массивы должны иметь четко определенную форму, например, (2,2,2) в вашем последнем примере. Ваш список cars - это список списков, длина внутренних списков которого 2,3,3,2 не соответствует четко определенной форме для numpy.

Могу ли я предложить вам добавить некоторые значения NaN к вашему cars список, чтобы создать все внутренние списки длиной 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 и не должны вести себя как обычные допустимые значения, что облегчит их обработку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...