Разделить вложенный массив NumPy - PullRequest
0 голосов
/ 12 июня 2018

У меня есть пустой массив формы 28 x 1875. Каждый элемент представляет собой список из 3 элементов (только с плавающей точкой).Мне нужно разделить каждый из этих элементов на отдельные, чтобы получить массив формы 28x5625 (1875 * 3).Я пробовал np.split, однако он разделяет только каждый элемент, но не каждый подэлемент.Есть ли быстрый способ сделать это?

1 Ответ

0 голосов
/ 12 июня 2018

Создание двумерного массива списков:

In [522]: arr = np.empty(6,object)
In [523]: arr[:] = [list(range(i,i+3)) for i in range(6)]
In [524]: arr = arr.reshape(2,3)
In [525]: arr
Out[525]: 
array([[list([0, 1, 2]), list([1, 2, 3]), list([2, 3, 4])],
       [list([3, 4, 5]), list([4, 5, 6]), list([5, 6, 7])]], dtype=object)

Такой массив проще заполнить, если он равен 1d, поэтому я начинаю с (6,) и изменяю форму после.

Предложение Пола Панцера:

In [526]: np.array(arr.tolist())
Out[526]: 
array([[[0, 1, 2],
        [1, 2, 3],
        [2, 3, 4]],

       [[3, 4, 5],
        [4, 5, 6],
        [5, 6, 7]]])
In [527]: _.reshape(2,-1)
Out[527]: 
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
       [3, 4, 5, 4, 5, 6, 5, 6, 7]])

Вы также можете использовать np.stack (версия np.concatenate) для создания массива nd.Однако для этого требуется массив объектов 1d - отсюда ravel:

In [536]: np.stack(arr.ravel())
Out[536]: 
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6],
       [5, 6, 7]])

, который может быть изменен по мере необходимости:

In [537]: np.stack(arr.ravel()).reshape(2,-1)
Out[537]: 
array([[0, 1, 2, 1, 2, 3, 2, 3, 4],
       [3, 4, 5, 4, 5, 6, 5, 6, 7]])

В некоторых случаях нам необходимо transposeоси, чтобы получить желаемый порядок.

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