m.data = (col_total[:,A.col].A*(row_total[A.row,:].T.A)/n)[0]
是一種完全矢量化的計算m.data
的方法。它可能會被清理一下。 col_total
是matrix
,因此執行逐元素乘法需要一些額外的語法。
我將演示:
In [37]: m=sparse.rand(10,10,.1,'csr')
In [38]: col_total=m.sum(axis=0)
In [39]: row_total=m.sum(axis=1)
In [40]: n=int(col_total.sum(axis=1))
In [42]: A=m.tocoo()
In [46]: for i,j in zip(A.row,A.col):
....: m[i,j]= col_total.item(j)*row_total.item(i)/n
....:
In [49]: m.data
Out[49]:
array([ 0.39490171, 0.64246488, 0.19310878, 0.13847277, 0.2018023 ,
0.008504 , 0.04387622, 0.10903026, 0.37976005, 0.11414632])
In [51]: col_total[:,A.col].A*(row_total[A.row,:].T.A)/n
Out[51]:
array([[ 0.39490171, 0.64246488, 0.19310878, 0.13847277, 0.2018023 ,
0.008504 , 0.04387622, 0.10903026, 0.37976005, 0.11414632]])
In [53]: (col_total[:,A.col].A*(row_total[A.row,:].T.A)/n)[0]
Out[53]:
array([ 0.39490171, 0.64246488, 0.19310878, 0.13847277, 0.2018023 ,
0.008504 , 0.04387622, 0.10903026, 0.37976005, 0.11414632])
是'row_total.item(我)'應該是在分母? – user2357112
我沒有看到這個計算應該如何產生預期的頻率。 – user2357112
你說得對,應該是col_total.item(j)* row_total.item(i)/ n 我現在要編輯。 – kormak