Поместите последний член каждого подмассива многомерного массива в список - PullRequest
3 голосов
/ 14 июля 2020

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

Например: -

array([[[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 13,  35,  14]],        # pop this row [13 ,35, 14]

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 13,  35,  14],
         [  9,  61,  34]],        # pop this row [9,61,34] 

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 13,  35,  14],
         [  9,  61,  34],
         [ 54, 127, 105]],        # pop this row[54,127,105]

        [[  0,   0,   0],
         [ 13,  35,  14],
         [  9,  61,  34],
         [ 54, 127, 105],
         [ 92, 170, 141]],        # pop this row and similarly other rows below... 

        [[ 13,  35,  14],
         [  9,  61,  34],
         [ 54, 127, 105],
         [ 92, 170, 141],
         [ 19,  88,  73]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  2,  14,   2]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  2,  14,   2],
         [216, 192, 173]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31]],

        [[  0,   0,   0],
         [  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31],
         [194, 185, 180]],

        [[  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31],
         [194, 185, 180],
         [  8,  32,  14]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152]],

        [[  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152],
         [206, 188, 181]],

        [[ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152],
         [206, 188, 181],
         [  1,  38,  18]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70]],

        [[  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70],
         [ 56,  51,  49]],

        [[ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70],
         [ 56,  51,  49],
         [ 49, 141, 112]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0]],

        [[  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0],
         [  8,   5,   4]],

        [[147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0],
         [  8,   5,   4],
         [103, 103, 101]]]])

Я пробовал технику нарезки, но не получилось.

Если я конвертирую этот массив в список (названный поездом) и запускаю код: -

for i in range(len(train)):
    for j in range(len(train[i])):
        for k in range(len(train[i][j])):
            train_x.append(train[i][j][k][:-1])
            train_y.append(train[i][j][k][-1])

я думал, что это сработает, но не сработало. Может ли кто-нибудь проверить код или предложить альтернативный метод для этого.

Результат должен быть: -

train_x: -

      [[[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 13,  35,  14]],         

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 13,  35,  14],
         [  9,  61,  34]],        

        [[  0,   0,   0],
         [ 13,  35,  14],
         [  9,  61,  34],
         [ 54, 127, 105]],      # this continues below....

        [[ 13,  35,  14],
         [  9,  61,  34],
         [ 54, 127, 105],
         [ 92, 170, 141]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  2,  14,   2]],    # I have edited till here but it goes on like this
 
        [[  0,   0,   0],
         [  0,   0,   0],
         [  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31]],

        [[  0,   0,   0],
         [  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31],
         [194, 185, 180]],

        [[  2,  14,   2],
         [216, 192, 173],
         [111,  58,  31],
         [194, 185, 180],
         [  8,  32,  14]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152]],

        [[  0,   0,   0],
         [ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152],
         [206, 188, 181]],

        [[ 27,  41,  30],
         [209, 194, 192],
         [181, 156, 152],
         [206, 188, 181],
         [  1,  38,  18]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70]],

        [[  0,   0,   0],
         [ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70],
         [ 56,  51,  49]],

        [[ 42, 105,  90],
         [ 59,  49,  46],
         [ 73,  75,  70],
         [ 56,  51,  49],
         [ 49, 141, 112]]],


       [[[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22]],

        [[  0,   0,   0],
         [  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0]],

        [[  0,   0,   0],
         [147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0],
         [  8,   5,   4]],

        [[147, 149, 150],
         [ 20,  22,  22],
         [  0,   0,   0],
         [  8,   5,   4],
         [103, 103, 101]]]]

train_y должен быть списком удаленных элементов .

1 Ответ

2 голосов
/ 14 июля 2020

У вас есть 4-мерный массив.
Чтобы получить только последние «строки», как вы описываете в своих комментариях, вам нужно только перебрать первые 2 измерения, а в 3-м измерении взять только последний элемент ( нет необходимости перебирать k, просто используйте -1) и вообще не индексируйте 4-е измерение:

for i in range(len(train)):
    for j in range(len(train)):
            train_x.append(train[i][j][:-1])
            train_y.append(train[i][j][-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...