使用numpy获取数组列表中相交元素的计数(避免循环)

2024-10-08 22:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为MyFruits的值数组,如:

[apple, orange, banana, apple, pear]

然后我有一个数组列表,如:

[apple, orange]
[blueberry, watermelon, pear]
[grape, orange, grape, orange]
[]
[cantaloupe]

对于列表中的每个数组,我想得到与MyFruits数组相交的元素数除以数组中的元素总数。因此,输出将是:

2 / 2 = 1
1 / 3 = 0.66667
2 / 4 = 0.5
0 / 0 = (in this case 0)
0 / 1 = 0

基本上:

[1, 0.66667, 0.5, 0, 0]

我已经在Python中使用for循环完成了这项工作,但是数据集非常庞大,速度非常慢。有人建议使用numpy,但我很难理解


Tags: in元素apple列表数组thisbananapear
2条回答

假设您有两个列表,一个长度为M,另一个长度为N。如果通过简单的线性搜索完成,则需要进行O(M*N)字符串比较才能找到两个列表中的元素

您可以使用Python集对此进行改进。将列表转换为Python集,并使用set intersection (&)查找它们的公共元素。然后复杂度降低到O(M+N)

这比你的好吗,还是一样

ratios = []

for d in data:
  count = 0
  for fruit in myFruits:
    count += d.count(fruit)
  ratio = count / (len(d) or 1)
  ratios.append(ratio)

replit中的可执行文件:https://repl.it/@ToniAlatalo/CountOccurrences

我不认为numpy能帮上忙,它是用于数字处理的,但也许有一个好方法可以写出你需要的东西

相关问题 更多 >

    热门问题