仅在位置 0 处保留具有唯一值的子数组

Jiv*_*van 3 python arrays numpy array-broadcasting

从 Numpy nd 数组开始:

>>> arr
[
    [
        [10, 4, 5, 6, 7],
        [11, 1, 2, 3, 4],
        [11, 5, 6, 7, 8]
    ],
    [
        [12, 4, 5, 6, 7],
        [12, 1, 2, 3, 4],
        [12, 5, 6, 7, 8]
    ],
    [
        [15, 4, 5, 6, 7],
        [15, 1, 2, 3, 4],
        [15, 5, 6, 7, 8]
    ],
    [
        [13, 4, 5, 6, 7],
        [13, 1, 2, 3, 4],
        [14, 5, 6, 7, 8]
    ],
    [
        [10, 4, 5, 6, 7],
        [11, 1, 2, 3, 4],
        [12, 5, 6, 7, 8]
    ]
]
Run Code Online (Sandbox Code Playgroud)

我想只保留 3 个子数组的序列,这些子数组在位置 0 处只有一个唯一值,以获得以下结果:

>>> new_arr
[
    [
        [12, 4, 5, 6, 7],
        [12, 1, 2, 3, 4],
        [12, 5, 6, 7, 8]
    ],
    [
        [15, 4, 5, 6, 7],
        [15, 1, 2, 3, 4],
        [15, 5, 6, 7, 8]
    ]
]
Run Code Online (Sandbox Code Playgroud)

从初始数组中,arr[0]arr[3]arr[4]被丢弃,因为它们在位置上都有多个唯一值0(分别为[10, 11][13, 14][10, 11, 12])。

我尝试摆弄,numpy.unique()但只能获取0所有子数组中位置的全局唯一值,这不是这里所需要的。

- 编辑

以下似乎让我更接近解决方案:

>>> np.unique(arr[0, :, 0])
array([10, 11])
Run Code Online (Sandbox Code Playgroud)

arr但我不确定如何在不使用 Python 循环的情况下获得比这高一级的值,并为每个子数组设置一个条件。

rch*_*ome 5

我让这个工作没有任何转置。

arr = np.array(arr)
arr[np.all(arr[:, :, 0] == arr[:, :1, 0], axis=1)]
Run Code Online (Sandbox Code Playgroud)