稀疏矩阵乘法非零个数的期望

问题

n*n的稀疏矩阵,平均每行每列都有m个非0的数,n>>m。如果A和B都是上述类型矩阵,那么C=A@B ,C平均每行有多少个非0的数据?

思路

  1. A的第i行平均有m个非零元素,对应列位置k1, k2, …, km。
  2. 对于每个k,B的第k行平均有m个非零元素,分布在n列中,因此每个位置BkjB_{kj}Bkj非零的概率为mn\frac{m}{n}nm。 对于每个j,CijC_{ij}Cij非零的概率为1 - (1−mn)m(1 - \frac{m}{n})^m(1nm)m,即在m个k中存在至少一个k使得AikA_{ik}AikBkjB_{kj}Bkj都不为零的概率。
  3. 1−(1−mn)m1 - (1 - \frac{m}{n})^m1(1nm)m用二项公式近似展开是m2n\frac{m^2}{n}nm2CijC_{ij}Cij非零的概率为m2n\frac{m^2}{n}nm2,那么整体一行非零个数的期望就是m2m^2m2

易混淆点

  1. A的第i行平均有m个非零元素,对应列位置k1, k2, …, km,那么第i行中每一个位置非零的概率就是m/n,那么CijC_{ij}Cij和中的每一项非零的概率就是(mn)2(\frac{m}{n})^2(nm)2,然后再把和给加起来算概率就有点晕了。。。这么思考会忽略A的第i行平均有m个非零元素,这m个非零元素的排列就有A(n,m)中可能性,假设这些可能性之间是等概率的,那就整体相当于A(n,m)∗1A(n,m)∗pA(n,m)*\frac{1}{A(n,m)}*pA(n,m)A(n,m)1p,即固定A的第i行平均有m个非零元素分布的前提下再去讨论B的非零情况,其中p就是B的非零概率和A的某一种分布对上的情况。所以首先要放弃Cij=∑kAikBkjC_{ij}=\sum_k A_{ik}B_{kj}Cij=kAikBkj中每一个AikA_{ik}Aik概率的分析,而且把A的第i行整体固定成一个分布

代码验证

import torch
n = 1000
m = 3

def generate(n,m):
    res = torch.empty(0,n)
    for _ in range(n):
        row = torch.concat([torch.ones(m), torch.zeros(n-m)])
        indices = torch.randperm(row.size(0))
        row = row[indices].unsqueeze(0)
        res = torch.concat([res, row], dim=0)
    return res
a = generate(n, m)
b = generate(n, m)
c = a@b
for i in range(n):
    print(len([item for item in c[i,:].tolist() if item > 0]))

'''
输出:
9
9
9
8
9
...
9
9
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值