gpt4 book ai didi

python - 查找在数组中恰好出现一次的项目

转载 作者:行者123 更新时间:2023-11-28 22:03:24 25 4
gpt4 key购买 nike

我有一个二维数组。在这种情况下,每个行向量都被认为是感兴趣的数量。我想要做的是将出现恰好一次的所有行作为一个数组返回,并将出现多次的所有行作为第二个数组返回。

例如,如果数组是:

a=[[1,1,1,0], [1,1,1,0], [5,1,6,0], [3,2,1,0], [4,4,1,0], [5,1,6,0]]

我想返回两个数组:

nonsingles=[[1,1,1,0], [1,1,1,0], [5,1,6,0], [5,1,6,0]]
singles= [[3,2,1,0], [4,4,1,0]]

保留顺序很重要。我为此编写的代码如下:

def singles_nonsingles(array):
#returns the elements that occur only once, and the elements
#that occur more than once in the array
singles=[]
nonsingles=[]
arrayhash=map(tuple, array)

for x in arrayhash:
if (arrayhash.count(x)==1):
singles.append(x)

if (arrayhash.count(x)>1):
nonsingles.append(x)

nonsingles=array(nonsingles)
singles=array(singles)

return {'singles':singles, 'nonsingles':nonsingles}

现在,我很高兴地说这可行,但不高兴地说它非常慢,因为我拥有的典型数组是 30000(行)x10 个元素/行=300000 个元素。谁能给我一些关于如何加快速度的提示?如果这个问题很简单,我很抱歉,我是 Python 的新手。另外,如果有帮助的话,我正在将 Numpy/Scipy 与 Python 2.7 结合使用。

最佳答案

在Python 2.7或以上版本中,可以使用collections.Counter来统计出现的次数:

def unique_items(iterable):
tuples = map(tuple, iterable)
counts = collections.Counter(tuples)
unique = []
non_unique = []
for t in tuples:
if counts[t] == 1:
unique.append(t)
else:
non_unique.append(t)
return unique, non_unique

关于python - 查找在数组中恰好出现一次的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253502/

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