有效地重新排序/解开整数对

时间:2016-02-04 21:26:14

标签: python arrays numpy graph-theory

要解释我想做什么有点难,所以最好的方法是展示一个我认为的例子。 我有一个2D numpy数组,其中包含一个整数对列表。这些整数从0到N,每个都出现在2对列表中,除了其中两个(将被称为极值)。因此该列表包含N-1对。

我想重新排序数组,让它从包含极值的一对开始,然后让前一对开始的下一对...非常混乱,所以看看这个例子: 我从这个数组开始:

array([[3, 0], [3, 2], [4, 0], [1, 2]])

我想最终得到这个:

array([[1, 2], [2, 3], [3, 0], [0, 4]])

这是一个有效的算法但它包含一个N-1循环......在这种情况下它不是问题,因为N = 5但是我想用N = 100000或更多,所以我想没有显式的python循环但是无法找到方法......

import numpy as np

co = np.array([[3, 0], [3, 2], [4, 0], [1, 2]])
extrema = np.nonzero(np.bincount(co.flat) == 1)[0]

nb_el = co.shape[0]
new_co = np.empty_like(co)
start = extrema[0]
for el_idx in xrange(nb_el):
    where_idx = np.where(co == start)
    if where_idx[1][0] == 1:
        new_co[el_idx] = co[where_idx[0][0]][::-1]
    else:
        new_co[el_idx] = co[where_idx[0][0]]
    co = np.delete(co, where_idx[0], 0)
    start = new_co[el_idx][-1]

print new_co
# array([[1, 2], [2, 3], [3, 0], [0, 4]])

0 个答案:

没有答案