当前位置: 首页 > 知识库问答 >
问题:

计算矩阵的log2

柳涵映
2023-03-14

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

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

或者:由于几年前我使用过Mathematica,所以我知道了MatrixFunction[]函数,这可能是解决问题的一个步骤(正如在这里讨论的),现在我想知道Python中是否也存在这样的函数?

共有1个答案

后源
2023-03-14

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

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         ]

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

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]]
 类似资料:
  • 我有一个矩阵。只有唯一的颜色以不同的权重重复它们自己。从它们中,我得选择一半,另一半必须用从第一个中最接近的元素替换。 我想到了在图像中循环,并搜索最近的颜色为当前的一个。找到后,我把一个换成另一个。 但我有3个循环、、。前两个I循环通过RGB矩阵,第三个用于循环到包含最终颜色的矩阵。这需要一些时间来计算。 可以做些什么来加快它的速度? 循环如下所示: 表示选择为最终颜色的半色。 我可以考虑一些小

  • 问题内容: 我正在尝试计算Java中的逆矩阵。 我遵循伴随方法(首先计算伴随矩阵,然后转置该矩阵,最后将其乘以行列式值的倒数)。 当矩阵不太大时有效。我检查过,对于尺寸最大为12x12的矩阵,可以快速提供结果。但是,当矩阵大于12x12时,完成计算所需的时间呈指数增长。 我需要反转的矩阵是19x19,并且花费太多时间。消耗更多时间的方法是用于行列式计算的方法。 我使用的代码是: 有人知道如何更有效

  • 问题内容: 我想通过Tensorflow计算Jacobian矩阵。 是)我有的: 是损失函数,都是可训练的变量,并且是许多数据。 但是,如果我们增加数据数量,则需要花费大量时间来运行该功能。有任何想法吗? 问题答案: 假设和是Tensorflow张量,并且取决于: 结果具有形状,并提供的每个元素相对于的每个元素的偏导数。

  • 问题内容: 我想使用scipy计算矩阵的数学等级。最明显的函数是计算数组的维数(即标量的维数为0,矢量为1,矩阵为2等)。我知道该模块具有此功能,但是我想知道这样的基本操作是否内置在某个矩阵类中。 这是一个明确的示例: 这给出了维度,我正在寻找的答案。 问题答案: Numpy提供:

  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)

  • 如何计算大的皮尔逊互相关矩阵( 更新:我读了阿帕奇火花的实现 但对我来说,看起来所有的计算都发生在一个节点上,而不是真正意义上的分布式。 请在这里放一些光。我还尝试在3节点火花群集上执行它,下面是屏幕截图: 正如您从第二张图中看到的,数据在一个节点上被拉起,然后进行计算。我在这里对吗?