这是一种矢量化方法 -
def findConnectedNodes(a, node_id = 3):
b = a[(a == node_id).any(1)]
return b[b!=node_id]
示例运行 -
In [40]: element
Out[40]:
array([[3, 2],
[1, 4],
[1, 3]])
In [41]: findConnectedNodes(element, node_id=3)
Out[41]: array([2, 1])
In [42]: findConnectedNodes(element, node_id=1)
Out[42]: array([4, 3])
In [43]: findConnectedNodes(element, node_id=2)
Out[43]: array([3])
为了提高性能,我们可以使用切片来获得b,以获得这样一个两列输入数组的成对节点。此外,我们可以在这里使用更多的布尔掩码。因此,我们将有另外两种方法,就像这样 -
def findConnectedNodes_v2(a, node_id = 3):
b = a[(a[:,0] == node_id) | (a[:,1] == node_id)]
return b[b!=node_id]
def findConnectedNodes_v3(a, node_id = 3):
mask2D = a == node_id
mask1D = mask2D[:,0] | mask2D[:,1]
return a[mask1D][~mask2D[mask1D]]