gpt4 book ai didi

python - 如何计算 numpy 数组列表中的重复项数?

转载 作者:行者123 更新时间:2023-12-05 01:30:17 26 4
gpt4 key购买 nike

我有一个需要清理的数组(排列)列表。这是我当前列表的样子:

>>>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 以确保没有重复。问题是算法的复杂性。 list(set(permutations))permutations.count() 不起作用,因为 np 数组不可散列。

如果您能给我任何建议,我将不胜感激,以便在所需的代码行数或时间/内存复杂性方面提高效率!

最佳答案

一种解决方案是将 np.unique()return_counts = True 一起使用,并压缩生成的唯一数组及其计数:

from numpy import array
import numpy as np

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])]


>>> list(zip(*np.unique(permutations, return_counts = True, axis = 0)))

[(array([1, 2, 3, 8]), 3),
(array([1, 2, 6, 7]), 3),
(array([ 1, 5, 6, 12]), 3),
(array([2, 3, 4, 9]), 3),
(array([ 3, 4, 5, 10]), 3),
(array([ 4, 5, 6, 11]), 3)]

关于python - 如何计算 numpy 数组列表中的重复项数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67233547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com