python - 将多维数组的每个子数组的最后一项放入列表

标签 python arrays

我有一个如下所示的多维数组。 我想在最后弹出所有元素并将它们附加到一个单独的列表。

例如:-

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

最佳答案

你有一个 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])

关于python - 将多维数组的每个子数组的最后一项放入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62899687/

相关文章:

Python Regex - 替换不在两个特定单词之间的字符串

c++ - 返回 std::array 未知大小

c++ - 检索数组名称

python - 什么是指向数组数据开头的 Python 缓冲区对象?

python - 如何在 Python 中唯一标识媒体文件的内容,而不是元数据?

python - IF 语句 Pandas Dataframe : The truth value of a Series is ambiguous

javascript - 如何向数组中的数组添加 JavaScript

java - 在函数中取任何数值原始数组

Python3插件系统