Wolfram mathematica mathematica中如何重载矩阵乘法的次数和加号
我想为mathematica中的矩阵乘法重载Wolfram mathematica mathematica中如何重载矩阵乘法的次数和加号,wolfram-mathematica,Wolfram Mathematica,我想为mathematica中的矩阵乘法重载次和加,例如,让次为位和,加上是位或,然后进行矩阵乘法 有没有简单的方法,不用重写我自己的矩阵乘法 谢谢。问题是你想改变什么-时代的行为和加上,或点。通常,Block技巧通常是最简单的方法。在这种情况下,由于Dot不调用高级Plus或Times,因此可以执行以下操作: mat1 = {{1,2},{3,4}}; mat2= {{5,6},{7,8}}; Block[{Dot = Inner[BitAnd,#1,#2,BitOr]&}, ma
次
和加
,例如,让次
为位和
,加上是位或
,然后进行矩阵乘法
有没有简单的方法,不用重写我自己的矩阵乘法
谢谢。问题是你想改变什么-时代的行为和
加上
,或点
。通常,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}}
但请注意,这可以有效地重新实现矩阵乘法(使用
内部)-没有其他方法,因为点
是在内部实现的,并且不使用加
或时间
注意,重新定义内置的时间
将破坏任何Mathematica函数,这些函数期望矩阵上的时间
具有标准行为。一个更安全的选择是定义MyTimes
,并使用Notation包提供自己的外观和缺点。重载的想法不是为其他数据类型提供操作符功能吗?在这种情况下,已经为矩阵定义了时间。所以,您想失去这个预定义的含义,并用BitAnd和BitOr行为覆盖它吗?为什么不直接使用后面的函数呢?或者你想使用他们的符号?有更好的解决办法。在任何情况下都不应该超载加号或加号。Leonid Shifrin的方法将是完成这项特殊任务的一个好方法。虽然更改块内的点对于一般用法来说并不是必需的,因为您可以定义myDot或类似的东西。@Daniel感谢您澄清这一点。我对过去做过几次(超载次数或更多)感到内疚(主要是在我学习mma的时候),但我总是有一种不好的感觉。