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