【问题标题】:pandas: how to broadcast multiply by vector * matrix * vector, columns-wise熊猫:如何广播乘以向量*矩阵*向量,按列
【发布时间】:2019-02-12 22:19:17
【问题描述】:

蟒蛇3.5.2;熊猫 0.23.4; numpy 1.15.4;在窗户上

我正在尝试找到一种有效的方法来逐个矩阵地进行 pandas 乘法向量,例如:

np.random.seed(43)    
w_ = np.random.uniform(size=(3,5))
# the vector w
w = pd.DataFrame(w_/w_.sum(axis=0), index=['a', 'b', 'c'])
# the matrix cov
cov = pd.DataFrame(np.cov(np.random.randn(3,100)), index=r.index, columns=r.index)

计算: 对于 w 的每一列,我使用:

r = [w.iloc[:,i].T.dot(cov.dot(w.iloc[:, i])) for i in range(w.shape[1])] 

给出:

[0.5073635209626383, 0.3262776109704286, 0.45469128089985883, 0.5226072271864488, 0.35602577932396257]

这很好,但是我正在寻找一种更有效和更优雅的方式来执行此操作,而不是通过列表理解或 lambda 函数。

【问题讨论】:

    标签: python-3.x pandas broadcasting


    【解决方案1】:

    您可以使用 np.diag:

    In [11]: np.diag(w.T.dot(cov.dot(w)))
    Out[11]: array([0.50736352, 0.32627761, 0.45469128, 0.52260723, 0.35602578])
    
    In [12]: r
    Out[12]:
    [0.5073635209626383, 0.32627761097042857, 0.45469128089985883,
     0.5226072271864487, 0.3560257793239626]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多