考虑数组:
import numpy as np
import numpy_indexed as npi
from itertools import permutations
arr = np.array([[1, 2, 3, 4],
[3, 3, 3, 6],
[2, 0, 0, 2],
[2, 0, 0, 2],
[8, 2, 8, 2],
[4, 5, 4, 5],
[3, 3, 3, 6],
[4, 5, 4, 5],
[0, 9, 8, 7],
[1, 2, 3, 4]])
字符串
我需要找到所有唯一的行排列。我现在做的是找到所有10!行排列,然后使用npi.unique
。像这样:
arr_perms = np.array([arr[i, :] for i in permutations(range(len(arr)))])
u, index = npi.unique(arr_perms, return_index = True, axis=0)
型
这和预期的一样有效,但是由于我正在使用的数组的性质,它似乎很昂贵。这些数组都至少有一对(通常是几对)相同的行。
在所示的小示例中,10行包含4个相同的行对,因此唯一行置换的总数仅为10!/2^4 = 226800
,大大减少。
问题:有没有一种方法可以有效地找到唯一的行排列,而不必首先找到完整的排列集?
1条答案
按热度按时间n6lpvg4x1#
这里的代码可能会对你有所帮助,它仍然会创建所有的排列,但是它比你发布的代码快10倍,因为每个长度为4的子数组都使用了位移位转换为int。
字符串