gpt4 book ai didi

python - 在 Python 中处理对数空间中的矩阵乘法

转载 作者:太空狗 更新时间:2023-10-29 21:59:25 24 4
gpt4 key购买 nike

我正在实现隐马尔可夫模型,因此处理的概率非常小。我通过在对数空间中表示变量(所以 x → log(x))来处理下溢,它的副作用是乘法现在被加法取代,加法是通过 numpy.logaddexp 或类似方法处理的。

有没有一种简单的方法来处理对数空间中的矩阵乘法?

最佳答案

这是我能想到的最好的方法。

from scipy.special import logsumexp
def log_space_product(A,B):
Astack = np.stack([A]*A.shape[0]).transpose(2,1,0)
Bstack = np.stack([B]*B.shape[1]).transpose(1,0,2)
return logsumexp(Astack+Bstack, axis=0)

输入 A 和 B 是要相乘的矩阵 A0 和 B0 的对数,函数返回 A0 的对数B0。这个想法是 log(A0B0) 中的 i,j 点是 A0 和 B0 的第 j 列。所以它是A的第i行加上B的第j列的logsumexp。

在代码中,构建 Astack 使得 i,j 点是包含 A 的第 i 行的向量,构建 Bstack 使得 i,j 点是包含 B 的第 j 列的向量。因此 Astack + Bstack是一个 3D 张量,其 i,j 点是 A 的第 i 行加上 B 的第 j 列。取轴 = 0 的 logsumexp 然后给出所需的结果。

关于python - 在 Python 中处理对数空间中的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467022/

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