我有一个波动率向量和一个相关系数矩阵
volatilities = tf.constant([0.2, 0.4, 0.6], dtype=tf.float32)
correlations = tf.constant([[1, 0.25, 0.5], [0.25, 1, 0.3], [0.5, 0.3, 1]], dtype=tf.float32)
我想用这些值创建一个协方差矩阵
covariance = tf.tensordot(volatilities, volatilities, axes=0) * correlations
到目前为止,一切顺利。现在我在一个批量训练过程中使用它,我的波动率和相关系数的形状分别是(batch_size, 3)
和(batch_size, 3, 3)
。我花了很多时间试图弄清楚如何得到协方差矩阵。我首先试图得到一个形状为(batch_size, 3, 3)
的波动率矩阵,然后与相关系数进行标量相乘。但我没有成功得到波动率矩阵,最接近的是(3, 3)
Tensor。
volatility_matrix = tf.tensordot(volatilities, volatilities, axes=[[0], [0]])
如何高效地计算得到维度为batch_size
的相关矩阵?
2条答案
按热度按时间pvcm50d11#
正如@Lescurel引用的帖子提到的,这个问题可以通过使用
tf.einsum
来解决:解决了获得波动率矩阵的问题。从那里,它只是沿着第二个轴的标量乘法。具体来说,然后获得协方差矩阵,我做了
sigwle7e2#
这些是当某些信息未被表示时,共价矩阵和波动性的应用矩阵乘积,有助于在从成批信息中阅读时确定目标关系。
[样品]:
[输出]: