gpt4 book ai didi

python - 向量化投资组合风险

转载 作者:行者123 更新时间:2023-11-28 21:21:58 24 4
gpt4 key购买 nike

我将 N 对投资组合权重存储在一个 numpy 数组中,并想计算投资组合风险,即 w * E * w_T,其中 w_T 是权重转置。我想出的方法是遍历每个权重对并应用矩阵乘法。是否有一种矢量化方法可以让给定一个权重对(或者如果可能的话,所有总和为 1 的 N 个权重)我对每一行应用一个协方差矩阵来获得风险(即没有循环)?

import numpy as np

w = np.array([[0.2,0.8],[0.5,0.5]])
covar = np.array([0.000046,0.000017,0.000017,0.000032]).reshape([2,2])


w1 = w[0].reshape([1,2]) # each row in w
#portfolio risk
np.dot(np.dot(w1,covar),w1.T)

最佳答案

@Adam 的回答是有效的,但对于大数组,可能会产生非常大的临时数组 (NxN) 和不必要的计算(计算非对角线元素)。

这是一个类似但更有效的解决方案:(我添加了另一个权重对,以区分问题的不同维度)

w = np.array([[0.2,0.8],[0.5,0.5], [0.33, 0.67]])
covar = np.array([0.000046,0.000017,0.000017,0.000032]).reshape([2,2])
(np.dot(w, covar) * w).sum(axis=-1)
=> array([ 2.77600000e-05, 2.80000000e-05, 2.68916000e-05])

通过在第二步中使用普通乘法,我避免了不必要的非对角线计算。

编辑:解释临时数组

# first multiplication (in both solutions)
np.dot(w, covar).shape
(3, 2)
# second, my solution
(np.dot(w, covar) * w).shape
(3, 2)
# second, Adam's solution
np.dot(np.dot(w,covar),w.T).shape
(3, 3)

现在,如果您有 N 组要计算风险的权重(在此示例中为 N=3),并且 M您的投资组合中的工具(此处 M=2)和 N>>M,您将获得一个数组,该数组在 Adam 的解决方案中要大得多(NxN).不仅会消耗更多内存,填充非对角线元素的计算也很昂贵(矩阵乘法),而且没有必要。

关于python - 向量化投资组合风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com