Python 元组的两个numpy数组之间的差异
我得到了numpy ndarrayPython 元组的两个numpy数组之间的差异,python,numpy,compare,tuples,unique,Python,Numpy,Compare,Tuples,Unique,我得到了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.] [2
wall
,它由元组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
。不幸的是,交叉/独特或其他严格的方法对我不起作用。如有任何提示,将不胜感激 熊猫是这方面的一个很好的图书馆。也许不是最有效的方法,但它可以完成任务
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
从您的问题和评论中可以看出,您希望删除沿第一个轴的唯一元素。您可以通过指定轴=0来执行此操作:
np.unique(wall, axis=0)
如果
wall.dtype是object
并存储某种brick
对象,只要它们支持相等性检查=
(\uuuuuueq\uuuu
),您就可以使用np。unique(a)
有一个轴
参数,那么您能详细说明为什么不能使用它吗?我也不明白为什么你有一个元组数组而不是2D数组(根据你显示的输出,你似乎有)。因为我收到cv2.trackers.update的wall
。我无法解决的问题是np.unique
返回包含所有唯一元素的1D数组,而不是唯一的块。请注意,每个数字中的点表示数组中有浮点数。如果您只有整数,那么在创建数组时传递dtype=int
以获得整数数组。这不是您想要的吗?如果您的数组是dtype=object
并且包含作为任意对象的砖块,只要它们支持=
,您就可以使用np.unique(a)
,它将为您提供一个唯一砖块对象的数组。从你的问题来看,这似乎是你的要求。如果没有,请用可复制(即可复制和粘贴)的代码以及预期输出更新您的问题。这似乎是合法的,将尝试这种方式。这与使用np.unique(a,axis=0)
有何不同?Pandas将保持行的组织,而numpy不会。如果这不是问题,那么numpy方法可能确实更好。实际上,在测试之后np.unique(a,axis=0)
最适合我。非常感谢,伙计们。