Как нарезать многомерный массив с Numpy, несколько столбцов? - PullRequest
0 голосов
/ 10 июля 2019

Я создаю многомерный массив разных размеров, хотя все они будут иметь четное число столбцов.

>> import numpy as np
>> x = np.arange(24).reshape((3,8))

Что приводит к:

array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20, 21, 22, 23]])

Я могу нарезать на кусочки и получить первый столбец в массиве:

>> newarr = x[0:,0:2]

array([[ 0,  1],
       [ 8,  9],
       [16, 17]])

Однако я хочу иметь один массив, который представляет собой просто список столбцов, в которых столбцы 1 и 2 вместе, 3 и 4 вместе и т. Д. Например:

array([[[ 0,  1],
       [ 8,  9],
       [16, 17]],
       [[ 2,  3],
       [10, 11],
       [18, 19]],
       etc....]
)

Этот код ниже работает, но он неуклюжий и мои массивы не все одинаковые. Некоторые массивы имеют 16 столбцов, некоторые имеют 34, некоторые имеют 50 и т. Д.

>> newarr = [x[0:,0:2]]+[x[0:,2:4]]+[x[0:,4:6]]

[array([[ 0,  1],
       [ 8,  9],
       [16, 17]]), array([[ 2,  3],
       [10, 11],
       [18, 19]])]

Должен быть лучший способ сделать это, чем

newarr = [x[0:,0:2]]+[x[0:,2:4]]+[x[0:,4:6]]+...+[x[0:,n:n+2]]

Помощь!

1 Ответ

1 голос
/ 10 июля 2019

Моя идея - добавить for loop:

slice_len = 2
x_list = [x[0:, slice_len*i:slice_len*(i+1)] for i in range(x.shape[1] // slice_len)]

Выход:

[array([[ 0,  1],
        [ 8,  9],
        [16, 17]]), array([[ 2,  3],
        [10, 11],
        [18, 19]]), array([[ 4,  5],
        [12, 13],
        [20, 21]]), array([[ 6,  7],
        [14, 15],
        [22, 23]])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...