【问题标题】:Python Matrix Exponentiation [duplicate]Python矩阵求幂[重复]
【发布时间】:2015-03-20 20:07:07
【问题描述】:

我想使用 Python 2.x 或 3.x 来生成一个最初为 2x2 的矩阵

0 1
1 1

到 1019 或更小的指数。 (即令 M = 我的矩阵,M1019)。

但是,我不想使用numpy

(顺便说一下,这个用于斐波那契生成器)

【问题讨论】:

  • 这不是直接的硬件问题。发帖前一定要试一试!
  • 你为什么不想使用像 numpy 这样的库呢?这是正确的做法,所以不这样做听起来是错误的做法; numpy 的矩阵可以采用多种数据类型,包括适合很多精度的数据类型。
  • 重新发布我对另一个问题的评论 b/c 它适用于此处:通常这些“我如何无缘无故地重新发明轮子”的问题在这里没有得到很好的解决。您没有说明不使用现有库的任何明确理由,但您显然不知道如何在不使用该库的情况下重新创建功能,否则这个问题将不存在……您明白我的意思跨越?
  • @Two-BitAlchemist:在这种情况下,默认的 numpy 类型是不够的,因为你只是遇到了溢出;虽然 python int 类型会自动缩放,但 numpy 类型不会,因此 M^100 已经包含不应包含的负值。
  • @bobhob314 为什么要为斐波那契生成器这样做?听起来是一种非常复杂的方法,尤其是当您不进行任何加速时。

标签: python matrix fibonacci exponentiation


【解决方案1】:

好的,您提出这个问题的方式确实意味着您没有机会实现这一目标。我会解释的;请不要生气:

  1. Python 是错误的工具,您正试图排除有助于减少错误的帮助程序。您正在尝试做的是最纯粹形式的数值数学——而 python 是一种脚本语言,它实际上只能在使用本机库时利用数值效率。其中之一是numpy,但您可能已经注意到(但没有写)这不起作用,因为在实际计算 Mn 时,您的数字变得非常大非常快n.
  2. 即使有一种神奇的方法可以优化算法,允许在单个指令中进行矩阵-矩阵乘法,并且您只需要另一条指令来计算并检查您是否仍然应该乘以计算Mn,您的计算最多需要 2*1019 条指令。假设你有 8 个 CPU 每秒可以处理 40 亿次,它仍然需要不到 20 年的时间。你需要的是正确的数学。就像,非常强大的数学。你可以找到一个对角线形式,这样 M = U D U-1; U 是酉矩阵,D 是对角矩阵。然后,使用matrix exponential e,您可以得到 eM = U eD U。经典的指数规则适用,因此您可以轻松计算 eM 1019。这仍然很难看,但会在您认为更安全的时候终止。不过,如果没有数值数学学位,祝你好运。

【讨论】:

  • 没关系,我从这里得到了一个可行的解决方案。 stackoverflow.com/questions/28548457/…。感谢您的反对意见! :P
  • @bobhob314:我真的不明白你在说什么反对票。此外,这清楚地将您的问题标记为重复。现在我必须投票关闭它。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 2020-05-08
  • 2015-04-26
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多