我有一组坐标,并尝试找到坐标所在的子集。
import numpy as np
a=np.array([[[0,1,1],[1,1,1]],[[0,1,1],[2,1,1]],[[3,3,3],[2,2,2]]])
如果我尝试这样的话:
print(np.argwhere(a==[[0,1,1]]))
print(a[[0,1,1]])
print(np.isin([0,1,1],a))
我明白了:
[[0 0 0]
[0 0 1]
[0 0 2]
[0 1 1]
[0 1 2]
[1 0 0]
[1 0 1]
[1 0 2]
[1 1 1]
[1 1 2]]
[[[0 1 1]
[1 1 1]]
[[0 1 1]
[2 1 1]]
[[0 1 1]
[2 1 1]]]
[ True True True]
但我期待的是:
[true,true,false]
修改
最好的情况是如果我得到一个数组,其中只有作为已建立子集成员的所有其他坐标都是这样的:
out = [[1,1,1],[2,1,1]]
答案 0 :(得分:6)
使用all(-1)
在最后一个轴上断言数组相等,然后any(1)
检查第二个轴是否存在这样的条件:
(a == [0,1,1]).all(-1).any(1)
# array([ True, True, False], dtype=bool)
在更新:
mask = (a == [0,1,1]).all(-1)
a[mask.any(1)[:,None] & ~mask]
#array([[1, 1, 1],
# [2, 1, 1]])
答案 1 :(得分:0)
通过这样做,我得到了你正在寻找的结果:
[[0,1,1] in b for b in a]
我会试着找出isin
无效的原因。