【问题标题】:Numpy: Select columns two by twoNumpy:两两选择列
【发布时间】:2020-11-27 20:29:35
【问题描述】:

我正在使用 Python 上的 numpy 进行初学者数据分析。我有这段代码:

## column = [product]
## row = [client]
## value 1 means that a product has been purchased .
 
cart = np.array([[1, 1, 1, 1],
                 [1, 0, 1, 1],
                 [1, 1, 0, 0],
                 [0, 1, 1, 1]])

我想知道如何选择上面的两列两列以在最后打印每对产品的购买量。我还需要找出购买最多的一对产品。

每个元组 (u, v, n) 表示产品 u 和 v 一起购买了 n 次(每 n 个客户)。 输出将是:

[(0,1,2), (0,2,2), (0,3,2), (1,2,2), (1,3,2), (2,3,3)]
(2,3,3) ->  the most purchased.

谢谢。

【问题讨论】:

    标签: python arrays python-3.x numpy multidimensional-array


    【解决方案1】:

    这是一个快速简便的解决方案,可生成购买对和购买最多的列表。

    基本上,代码只是迭代列对(由combinations 创建),并对每一对求和。将总和等于 2 的对相加得出已售出对的数量。

    设置:

    a = np.array([[1, 1, 1, 1],
                  [1, 0, 1, 1],
                  [1, 1, 0, 0],
                  [0, 1, 1, 1]])
    

    示例代码:

    from itertools import combinations
    
    results = []
    for i, j in combinations([0, 1, 2, 3], 2):
        results.append((i, j, (a[:,[i,j]].sum(axis=1) == 2).sum()))
        
    max_ = max(results, key=sum)
    
    print(results)
    print(f'Max result: {max_}')
    

    输出:

    [(0, 1, 2), (0, 2, 2), (0, 3, 2), (1, 2, 2), (1, 3, 2), (2, 3, 3)]
    Max result: (2, 3, 3)
    

    【讨论】:

      【解决方案2】:

      你必须循环每对组合。这本质上是range(cart.shape[1]) x range(cart.shape[1]),即两个for 循环。

      对于给定的产品索引u,对应的向量是cart[:, u]。为了比较两个产品向量,我们可以应用点积:cart[:, u]*cart[:,v]。如果两种产品都由同一客户购买,则生成的向量将包含1。要计算同时购买这两种产品的客户数量,我们可以对向量求和。

      这是扩展版:

      p = range(cart.shape[1])
      res = []
      for u in p:
        for v in p:
          if u < v:
            res.append((u, v, sum(cart[:,u]*cart[:,v])))  
      

      或者一次性使用列表理解:

      p = range(cart.shape[1])
      [(u, v, sum(cart[:,u]*cart[:,v])) for u in p for v in p if u < v]
      

      【讨论】:

        猜你喜欢
        • 2014-06-15
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 2015-04-06
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多