如何用NumPy高效实现坐标子集判断与右外连接操作?
坐标子集判断与右外连接的高效实现
需求说明
正在构建知识库,需处理嵌套坐标数组:每个元素是一组[x,y]坐标对,坐标对整体无顺序,但内部x在前、y在后的顺序固定。核心操作:
- 判断不同坐标行是否互为子集
- 若存在子集关系,对较大数组执行右外连接(提取大数组中不在子集内的元素)
- 将新生成的连接结果加入知识库(需避免重复)
示例输入:
knowledgebase = [ [[1,2],[3,4],[5,6]], [[1,2],[5,6]] ]
此例中第二行是第一行的子集,右外连接后得到[[3,4]],需将该结果加入知识库。
现有纯Python实现
曾尝试用集合处理,但因列表无法存入集合失败,遂用纯Python实现逻辑,但嵌套循环导致效率极低:
for element1 in knowledgebase: for element2 in knowledgebase: if element1 == element2: continue if all(x in element2 for x in element1): outer_join = [item for item in element2 if item not in element1] if outer_join not in knowledgebase: knowledgebase.append(outer_join)
NumPy相关问题
希望改用NumPy提升效率,但存在以下疑问:
- 我尝试按如下方式定义NumPy数组,不确定是否为最优方案:
import numpy as np knowledgebase = np.array([ list([[1,2],[3,4],[5,6]]), list([[1,2],[5,6]]) ], dtype=object)
- 如何用NumPy高效实现上述子集判断与右外连接的逻辑?
- 不清楚如何创建行长度不同的NumPy数组
内容的提问来源于stack exchange,提问作者Melon Pie
相关产品推荐
相关产品推荐

