避免使用稀疏假人进行不必要的矩阵乘法

时间:2017-05-19 10:32:49

标签: python matrix scipy sparse-matrix

import numpy as np
import pandas as pd
catVar = np.array(list('abcbca')) #categorical independent variable
groupIDs = np.array([10,10,20,20,30,30]) #groups(/strata)
p = np.array([0.5, 0.5, 0.25, 0.75, 1, 0]) #'probabilities'
dummies = pd.get_dummies(catVar)

_,idx,tags = np.unique(groupIDs, return_index=1, return_inverse=1)
np.add.reduceat((p * dummies.T).T, idx)[tags]
[[ 0.5   0.5   0.  ]
 [ 0.5   0.5   0.  ]
 [ 0.    0.75  0.25]
 [ 0.    0.75  0.25]
 [ 0.    0.    1.  ]
 [ 0.    0.    1.  ]]

在最后两行代码中,我创建了一个新表,其中每列的每个组的p和X之间的乘积之和。因为我的数据集是〜.5m x 4k,所以这个计算需要相当长的时间才能减少。我的问题是,当我将我的假人定义为稀疏矩阵时,是否有可能获得相同的结果,

from scipy import sparse
dumSp = sparse.csc_matrix(dummies)

以及上述计算的输出是否也可以直接转换为稀疏矩阵。

0 个答案:

没有答案