【发布时间】:2018-10-25 11:11:55
【问题描述】:
我正在尝试实现先验算法。在最后一个步骤中,我有两个从产品列表生成的元组数组。
>>> arr1 = array([(2421,), (35682,), (30690,), ..., (18622,), (18285,), (31269,)],
dtype=object)
>>> arr2 = array([(2421, 35682), (2421, 30690), (2421, 24852), ..., (18622, 18285),
(18622, 31269), (18285, 31269)], dtype=object))
我的想法是我需要检查arr1 中的哪一个是arr2 的子元组,即(2421, ) 是(2421, 30690) 的子元组。
我试过了
>>> if (2421,) in (2421, 1231):
... print('Yes')
... else:
... print('No')
我得到No。我也尝试过使用.issubset,但我得到了AtributeError。
我想知道如何在不走硬核方式的情况下做到这一点,
>>> print(len(arr1), len(arr2))
(9258, 263616)
我正在使用带有 Python 2 的 Jupyter 笔记本。仅使用 numpy、pandas 和 itertools。
所需的输出应该是以下形式;如果我有产品1,2,3 但我只考虑元组(1,) 和(2,) 那么我需要(1,2) 而不是(1,3) 来自所有2 产品组合。
【问题讨论】:
-
sourcetuple in othertuple仅在 整个元组 包含在othertuple中时才有效;(42,) in ((81,), (42,))为真,因为第二个元组包含嵌套元组,其中一个元组等于所查找的元组。对于每值测试,您可以使用if any(v in othertuple for v in sourcetuple):或使用sets,您可以在其中使用实际的子集测试;当seta是setb的子集或 相等时,seta <= setb为真。 -
现在,我怀疑这是一个更大问题的一小部分,你认为你找到了解决方案。我怀疑可能有更好的方法,例如使用实际集合。
-
是的,@MartijnPieters 我和一些同事谈过,他们告诉我改用套装。感谢您指出!
标签: python tuples jupyter-notebook subset apriori