Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy:逐列选择列_Python_Arrays_Python 3.x_Numpy_Multidimensional Array - Fatal编程技术网

Python Numpy:逐列选择列

Python Numpy:逐列选择列,python,arrays,python-3.x,numpy,multidimensional-array,Python,Arrays,Python 3.x,Numpy,Multidimensional Array,我正在用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,

我正在用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.

谢谢。

您必须在每对组合上循环。这本质上是
范围(cart.shape[1])x范围(cart.shape[1])
,即两个
循环

对于给定的产品索引
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=范围(购物车形状[1])
res=[]
对于p中的u:
对于p中的v:
如果u
或者一次完成一份清单:

p = range(cart.shape[1])
[(u, v, sum(cart[:,u]*cart[:,v])) for u in p for v in p if u < v]
p=范围(购物车形状[1])
[(u,v,sum(cart[:,u]*cart[:,v]))表示p中的u,如果u
您必须在每对组合上循环。这本质上是
范围(cart.shape[1])x范围(cart.shape[1])
,即两个
循环

对于给定的产品索引
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=范围(购物车形状[1])
res=[]
对于p中的u:
对于p中的v:
如果u
或者一次完成一份清单:

p = range(cart.shape[1])
[(u, v, sum(cart[:,u]*cart[:,v])) for u in p for v in p if u < v]
p=范围(购物车形状[1])
[(u,v,sum(cart[:,u]*cart[:,v]))表示p中的u,如果u
这里有一个简单快捷的解决方案,可以列出购买配对和购买最多的配对

基本上,代码只是迭代列对(由
组合创建),并对每对进行求和。将总和等于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的对相加,以得出已售出对的计数

设置:

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)