使用Python查找唯一的数组对

2024-09-29 17:17:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找一种Python式的方法来更快地完成这个手术

import numpy as np
von_knoten = np.array([0, 0, 1, 1, 1, 2, 2, 2, 3, 4])
zu_knoten =  np.array([1, 2, 0, 2, 3, 0, 1, 4, 1, 2])
try:
    for i in range(0,len(von_knoten)-1):
        for j in range(0,len(von_knoten)-1):
            if (i != j) & ([von_knoten[i],zu_knoten[i]] == [zu_knoten[j],von_knoten[j]]):
                    print(str(i)+".column equal " +str(j)+".column")
                    von_knoten = sp.delete(von_knoten , j)
                    zu_knoten = sp.delete(zu_knoten , j)
                    print(von_knoten)
                    print(zu_knoten)
except:
    print('end')

所以我需要最快的方法

^{pr2}$

[0 0 1 1 1 2 2 2 3 4]
[1 2 0 2 3 0 1 4 1 2]

谢谢;)


Tags: 方法inforlennprangecolumndelete
3条回答

这是一个矢量化的输出-

def unique_pairs(von_knoten, zu_knoten):
    s = np.max([von_knoten, zu_knoten])+1
    p1 = zu_knoten*s + von_knoten
    p2 = von_knoten*s + zu_knoten
    p = np.maximum(p1,p2)
    sidx = p.argsort(kind='mergesort')
    ps = p[sidx]
    m = np.concatenate(([True],ps[1:] != ps[:-1]))
    sm = sidx[m]
    return von_knoten[sm],zu_knoten[sm]

样本运行-

^{pr2}$

关于你的代码的一些注释;它不能做你想要的,它应该打印一些东西,你试过运行它吗?你能给我们看看你得到了什么吗?在

  • 首先,只需执行一个range(len(von_knoten));这将执行您想要的操作,因为range在默认情况下从0开始,并在结束前一步结束。

  • 如果您delete来自输入列表的某些项,并尝试访问它们末尾的项,则可能会获得IndexErrors,这将在耗尽对输入列表的分析之前完成。

  • 你做了一些sp.delete但我们不知道这是什么(代码也不知道),这将引发AttributeErrors。

  • 唉,请不要使用except:。这将捕捉到你做梦都想不到的例外情况,并可能解释为什么你不明白什么是错的。


那么,使用zip内建函数来获得排序的二维元组,并删除重复项呢?比如:

>>> von_knoten = [0, 0, 1, 1, 1, 2, 2, 2, 3, 4]
>>> zu_knoten =  [1, 2, 0, 2, 3, 0, 1, 4, 1, 2]
>>> set(tuple(sorted([m, n])) for m, n in zip(von_knoten, zu_knoten))
{(0, 1), (0, 2), (1, 2), (1, 3), (2, 4)}

我让你解决这个问题来得到你想要的东西。在

你正试图建立一个你从未见过的对的集合。 您可以使用not in,但需要检查以下任一方面:

L = []
for x,y in zip(von_knoten, zu_knoten):
  if (x, y) not in L and (y, x ) not in L:
    L.append((x, y))

这给出了元组的列表

^{pr2}$

你可以重塑它。在

相关问题 更多 >

    热门问题