计算矩阵的log2

2024-03-29 08:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python计算一个矩阵的基2对数(从矩阵指数与基2的反函数的意义上来说,如here而不是元素对数)。由于log()采用元素对数,我在Google上做了一些研究,以找到适合我的任务的东西。我的研究只给出了scipy函数logm(X),它给出了矩阵X的自然矩阵对数

如上所述,我需要用python找到矩阵的基2对数。当然,我知道公式$log\u a(x)=ln(x)/ln(a)$,其中ln是自然对数,但据我所知,这只适用于标量参数x(如果我错了请纠正我)。至少我还没有看到任何关于为什么这也适用于矩阵的争论。你知道吗

那么有人知道是否存在这样一个内置的matrix-log2函数吗?你知道吗

或者: 因为几年前我和Mathematica做过一点工作,所以我知道函数MatrixFunction[],这可能是解决我问题的一个步骤(如here所讨论的),现在我想知道Python中是否也存在这样的函数?你知道吗

谢谢你的帮助!你知道吗

PS:在我看来,提出的解决方案here不起作用


Tags: 函数log元素heregoogle对数矩阵scipy
1条回答
网友
1楼 · 发布于 2024-03-29 08:15:07

为什么你认为它只适用于标量参数?让我们玩简单的旋转矩阵

import numpy as np
from scipy.linalg import logm, expm

def log2M(a): # base 2 matrix logarithm
    return logm(a)/np.log(2.0)

def p2M(a): # base 2 matrix exponent
    return expm(np.log(2.0)*a)


alpha = 0.6
a = np.array([[np.cos(alpha), -np.sin(alpha)], [np.sin(alpha), np.cos(alpha)]])
print(a)
q = log2M(a)
print(q)

在这里你可以看到它产生了合理的输出

[      0      -alpha/log(2)]
[alpha/log(2)    0         ]

你可以把它和维基百科比较一下

我们可以把它计算回1。按对数(2)指数2缩放。泰勒展开手册

两个方法输出相同的输出,代码如下

f = 1.0
r = np.array([[1.0, 0.0], [0.0, 1.0]])
eq = np.array([[1.0, 0.0], [0.0, 1.0]])
for k in range(1, 10):
    r = np.dot(r, q)
    f = f * np.float64(k) / np.log(2.0)
    eq = eq + r / f

print(eq)
print(p2M(q))

输出

[[ 0.82533562 -0.56464247]
 [ 0.56464247  0.82533562]]
[[ 0.82533561 -0.56464247]
 [ 0.56464247  0.82533561]]

在我看来一切都是一致的

相关问题 更多 >