将多维数组中每个子数组的最后一个元素放入一个列表中

3
我有一个类似下面展示的多维数组。 我想弹出所有最后的元素并将它们附加到一个单独的列表中。
例如: -
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]]]])

我尝试了切片技术,但没有成功。

如果我将该数组转换为列表(命名为train)并运行以下代码:

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 应该是已删除元素的列表。


请记住,NumPy数组是不可变对象。 - Alexander Caskie
train_x.append(train[i][j][k][:-1]) 这里应该改为 train[i][j][k][-1],而不是 train[i][j][k][:-1] - Kashyap KN
不行,因为如果你看到train[0][0][0]的输出:- [[ 0, 0, 0], [ 0, 0, 0], [ 0, 0, 0], [ 0, 0, 0], [13, 35, 14]] - Ambarish Singh
1个回答

2
你有一个4维数组。
根据你在评论中的描述,要获取最后的“行”,只需要遍历前两个维度,在第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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接