Изменение формы массива в Python - PullRequest
3 голосов
/ 08 июля 2011

У меня есть массив элементов 48x365, где каждый элемент представляет собой список, содержащий 3 целых числа.Я хочу иметь возможность превратить его в массив 1x17520 со всеми нетронутыми списками в качестве элементов.Использование

np.reshape(-1)

, кажется, разбивает элементы на три отдельных целых числа и создает массив 1x52560.Поэтому мне либо нужен новый способ перестановки исходного массива, либо способ группировки элементов в новом массиве np.reshape (которые все еще в порядке) обратно в списки 3.

Спасибо за вашу помощь

1 Ответ

5 голосов
/ 08 июля 2011

Есть ли причина, по которой вы не можете сделать это явно?Как в:

>>> a = numpy.arange(17520 * 3).reshape(48, 365, 3)
>>> a.reshape((17520,3))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])

Вы также можете сделать это с помощью -1, просто его нужно соединить с другим аргументом соответствующего размера.

>>> a.reshape((17520,-1))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])

или

>>> a.reshape((-1,3))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])

Чуть позже мне пришло в голову, что вы также можете создать массив записей - это может быть целесообразно в некоторых ситуациях:

a = numpy.recarray((17520,), dtype=[('x', int), ('y', int), ('z', int)])

Это можно изменить в исходном видеВы пытались, то есть reshape(-1).Тем не менее, как говорится в комментарии larsmans, проще всего обрабатывать ваши данные как трехмерный массив.

...