我有一个数组列表(排列),需要进行清理。 这是我的当前列表的样子:
>>>permutations
[array([1, 2, 6, 7]),
array([1, 2, 6, 7]),
array([1, 2, 6, 7]),
array([1, 2, 3, 8]),
array([1, 2, 3, 8]),
array([1, 2, 3, 8]),
array([2, 3, 4, 9]),
array([2, 3, 4, 9]),
array([2, 3, 4, 9]),
array([ 3, 4, 5, 10]),
array([ 3, 4, 5, 10]),
array([ 3, 4, 5, 10]),
array([ 4, 5, 6, 11]),
array([ 4, 5, 6, 11]),
array([ 4, 5, 6, 11]),
array([ 1, 5, 6, 12]),
array([ 1, 5, 6, 12]),
array([ 1, 5, 6, 12])]
我的要求:
>>>neat_perm
[(array([1, 2, 6, 7]),3),
(array([1, 2, 3, 8]),3),
(array([2, 3, 4, 9]),3)
(array([3, 4, 5, 10]), 3),
(array([4, 5, 6, 11]), 3),
(array([1, 5, 6, 12]), 3)]
我想做的是创建一个元组列表,其中元组的第一个元素是数组,元组的第二个元素是在 permutations
中重复出现的次数。
直接而暴力的方法是对数组进行 O(n^2)
的 np.array_equal 操作,以确保没有重复项。问题在于算法复杂度。因为 np 数组不可哈希,所以 list(set(permutations))
和 permutations.count()
不能使用。
我将非常感谢您给我的任何建议,以使代码更有效率,无论是行数还是时间/内存复杂度!
np.unique
带有return_counts = True
参数会返回一个包含数组及其计数的元组,因此*
运算符可以将其解压成两个单独的数组,然后可以将它们一起压缩。 - sacuL