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 循环的情况下获得比这高一级的值,并为每个子数组设置一个条件。
我让这个工作没有任何转置。
arr = np.array(arr)
arr[np.all(arr[:, :, 0] == arr[:, :1, 0], axis=1)]
Run Code Online (Sandbox Code Playgroud)