c++ - 向量的部分排序
问题描述
给定 5 个向量,例如:
X1 X2
---------
A = [51, 134]
B = [40, 110]
C = [41, 191]
D = [35, 198]
E = [30, 140]
我试图找到类似的向量,例如 ifA[X1]>B[X1]
和A[X2]>B[X2]
,我们删除B
A 并将其保留为“好”向量。如果A[X1]>B[X1]
然后A[X2]<B[X2]
我们保留它们。我尝试在向量之间使用余弦相似度,但结果不正确。例如,上述向量将只有 3 个剩余的“好”向量,A,C,D
。比较每个属性并按列排序(部分排序)是我正在考虑的一种方式。但是如果我有d = 10
属性呢?如何解决这个问题?
解决方案
如果我理解正确,我认为您的意思是从A[Xi] > B[Xi]
,您实际上是指row[Xi] > next_row[Xi]
。
>>> A = [51, 134]
>>> B = [40, 110]
>>> C = [41, 191]
>>> D = [35, 198]
>>> E = [30, 140]
>>> arr = np.vstack([A, B, C, D, E])
>>> arr
array([[ 51, 134],
[ 40, 110],
[ 41, 191],
[ 35, 198],
[ 30, 140]])
>>> # (row_i[X1] > row_i+1[X1]) and (row_i[X2] > row_i+1[X2])
>>> cond1 = np.cumprod(arr[:-1] > arr[1:]).all(axis=1)
>>> cond1
array([ True, False, False, False])
>>> # (row_i[X1] > row_i+1[X1]) and (row_i[X2] < row_i+1[X2])
>>> cond2 = (arr[:-1, 0] > arr[1:, 0]) | (arr[:-1, 1] > arr[1:, 1])
>>> cond2
array([ True, False, True, True])
>>> cond1 | cond2
array([ True, False, True, True])
>>> arr[:-1][cond1 | cond2]
array([[ 51, 134], # A
[ 41, 191], # C
[ 35, 198]]) # D
推荐阅读
- ios - Searchcontroller 仅适用于 iOS 11 或更高版本
- iphone - 如何将短信 CSV 从诺基亚 2370C 导入到 Iphone?
- django - 在 django 模板中为“用户”提供了什么
- android - 在 Android 应用程序中检查 Internet 连接
- android - Android Studio?工具栏错误
- python - 想要使用 lambda 函数来更改单元格的类型(如果它是 float 类型)
- c++ - C++:将多态 lambda 传递给函数
- vb.net - System.net.web 异常。远程服务器返回错误:(530)未登录
- javascript - map函数里面的具体map函数
- php - Symfony Doctrine:向现有阅读器添加新的新注释命名空间