我希望在mathematica中重载Times
和Plus
进行矩阵乘法,例如,让Times
为BitAnd
,加号为BitOr
,然后做矩阵乘法。
有没有以简单的方式做到这一点,而不重写我自己的矩阵乘法?
感谢。
答案 0 :(得分:4)
问题是您想要改变的内容 - Times
和Plus
或Dot
的行为。通常,Block
技巧通常是最简单的方法。在这种情况下,由于Dot
不会调用高级Plus
或Times
,您可以这样做:
mat1 = {{1,2},{3,4}};
mat2= {{5,6},{7,8}};
Block[{Dot = Inner[BitAnd,#1,#2,BitOr]&},
mat1.mat2]
{{3,0},{5,2}}
但请注意,这有效地重新实现了矩阵乘法(使用Inner
) - 自Dot
内部实现并且不使用Plus
或{{ 1}}。