питон 3.5.2;панды 0,23,4;numpy 1.15.4;в Windows
Я пытаюсь найти эффективный способ сделать вектор умножения панд на матрицу за вектором, например:
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, Iиспользование:
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]
1018 *1018* 1018*
Это нормально, однако я ищу более эффективный и элегантный способ сделать это, кроме как с помощью понимания списка или лямбда-функции.