我有 numpy ndarraywall
它由元组组成brick = (x, y, w, h)
.
它看起来像
[[317. 276. 17. 12.]
[317. 276. 17. 12.]
[317. 276. 17. 12.]
[248. 276. 25. 17.]
[320. 274. 18. 13.]
[353. 273. 15. 11.]
[377. 272. 17. 11.]
[ 0. 271. 61. 71.]
[ 21. 266. 75. 49.]
[228. 280. 20. 14.]
[306. 245. 15. 20.]
[519. 239. 18. 18.]
[482. 252. 22. 10.]]
我想消除相同的,因为您可以看到前三个是相同的。之后,每次新的迭代(相机回调 - 帧接收(我都有新的wall
.我想将其与旧的进行比较并找到差异,基本上找到所有不同的brick
.不幸的是,交叉/独特或其他严格的方法对我不起作用。任何提示将不胜感激。
从您的问题和评论来看,您似乎想沿第一个轴删除唯一元素。您可以通过np.unique
指定axis=0
来执行此操作:
np.unique(wall, axis=0)
如果wall.dtype is object
并存储某种brick
对象,只要它们支持相等性检查==
(__eq__
(,就可以只用np.unique(a)
。
Pandas 是一个很好的库。可能不是最有效的方法,但它可以完成工作。
import pandas as pd
tmp = [
[317, 276, 17, 12.],
[317, 276, 17, 12.],
[317, 276, 17, 12.],
[248, 276, 25, 17.],
[320, 274, 18, 13.],
[353, 273, 15, 11.],
[377, 272, 17, 11.],
[ 0, 271, 61, 71.],
[ 21, 266, 75, 49.],
[228, 280, 20, 14.],
[306, 245, 15, 20.],
[519, 239, 18, 18.],
[482, 252, 22, 10.]
]
df = pd.DataFrame(tmp).drop_duplicates()
输出为:
0 1 2 3
0 317 276 17 12.0
3 248 276 25 17.0
4 320 274 18 13.0
5 353 273 15 11.0
6 377 272 17 11.0
7 0 271 61 71.0
8 21 266 75 49.0
9 228 280 20 14.0
10 306 245 15 20.0
11 519 239 18 18.0
12 482 252 22 10.0