1

a=SparseArray[{},{m,n},"*"] のように、Mathematica でスパース配列を操作したいと思います。デフォルト値はゼロではなく * です。次のような方法で Plus と Times を拡張することは可能ですか?

Plus[1, ]= Times[1, ]= but Plus[0,*]=0

ありがとう、ラボスラフ

4

1 に答える 1

3

ここで組み込み関数を変更する方法についてアドバイスを求めているので、そのような変更を安全に行うためのMathematicaの経験豊富なユーザーではないと結論付けます。

Plusはい、やなどのMathematicaの組み込み関数の定義やアクティビティを変更することは可能Timesです。しかし、それはほぼ間違いなく非常に悪い考えです。主な脅威は、これは特に加算や乗算などの基本的な操作に当てはまり、そのような変更の影響を、影響を必要とし、理解している状況にのみ制御することは非常に難しいということです。

より良いアイデアは、あなたが望むように動作するように関数の独自のバージョンを定義することです。このような操作は次のように開始される可能性があります。

mySparseArrayPlus[term1_SparseArray,term2_] :=

"*"また、sのデフォルト値などの文字列の使用は避けSparseArray、代わりにを使用する必要があると思いますSymbol

;の定義をいじってアプローチする必要がある場合Plus。Mathematicaドキュメントのこのページは、読み始めるのに良い場所を提供します。TimesUpValues

最後に、干渉する必要がある場合は、についてすべて読んでくださいUnprotect。幸運を祈ります。足し算や掛け算をやめたときに助けを求めて戻ってこないでください。

于 2012-10-31T14:15:25.850 に答える