0

我正在学习数值线性代数课程,并且我选择使用 python 作为我选择的语言(希望能够就业)。有没有办法评估 (AB)C 与 A(BC),其中 A、B、C 是一致矩阵?我想检查每个这些的 cpu 时间和操作计数。此外,有没有一种方法可以强制 python 将 AB 计算为外积的总和,以及一个矩阵,其条目分别是 A 和 B 的行和列的内积。我是 python 新手,谷歌搜索没有任何运气,这很少见。我正在使用使用 @ 进行矩阵乘法的 python 3.5*。我搜索了使用 python 完成数值线性代数但没有发现任何有用的资源。谢谢你的帮助。

4

1 回答 1

0

第一个问题的答案很简单:写(A @ B) @ CA @ (B @ C). CPython 足够聪明,知道尝试重写表达式太愚蠢了。语言定义不要求特殊方法(例如__add__for +)具有任何特定属性。(实际上,float add不是关联的。)

>>> from dis import dis
>>> dis('(a + b) + c')
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 BINARY_ADD
              7 LOAD_NAME                2 (c)
             10 BINARY_ADD
             11 RETURN_VALUE
>>> dis('a + (b + c)')
  1           0 LOAD_NAME                0 (a)
              3 LOAD_NAME                1 (b)
              6 LOAD_NAME                2 (c)
              9 BINARY_ADD
             10 BINARY_ADD
             11 RETURN_VALUE

替换+@,输出与ADD更改为相同MATRIX_MULTIPLY

我不明白第二个问题的细节,但你应该能够用一个__matmul__你想要的方法来定义你自己的 Matrix 类。它可以是“纯”python 或构建在numpy.

于 2016-01-11T00:09:32.733 回答