Python Numpy:逐列选择列
我正在用Python上的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,
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)