スイッチ/ケースは特に低速で柔軟性がありません。
changemは行列と2つの値vector newとoldを取ります。エントリが古いリストにある場合は、新しいリストの対応するエントリに置き換えられます。したがって、本質的にはむしろ遅くなり、行列全体を渡し、古いリストを検索し、新しいリストと置き換えられた場合は、新しいリストに置き換える必要があります。 どのようにスピードアップできますか?まず、スイッチ/ケースとしてハードコードしないでください。現代のコンパイラはおそらく多くのジャンプではなくループに最適化されますが、私はそれを保証しません。そしてそのアプローチは柔軟性がありません。 第2に、「古い」ベクトルをソートし、線形のものではなくバイナリ検索を使用することができます。これは、古いベクトルが長い場合にのみ有意に役立ちます。 第3に、マトリックスについて知っていることを利用することができます。古い値は特定の地域に拘束されていますか?圧倒的に高い可能性があり、最初にテストできる1つの値がありますか?古いリストで許可されていない値をすばやく除外できますか(大きすぎる、小さすぎる、不可欠な)。
古い値は整数で、インデックスを使用できますか?それをハッシュに一般化する。バイナリ検索よりも高速ですが、ハッシュのオーバーヘッドが増えます。 問題を別の方法で解決し、行列xy座標のインデックスを値で保持できますか?
多くのアプローチがあります。しかし、最初のステップとしてC言語でMatlab関数を単純に実装してください。十分に速いかもしれません。
ご意見ありがとうございます。可能な値は8つしかないので、これをルックアップテーブルとして実装しただけです(ただし、スワップを実行したいベクトルは数千の要素です)。つまり、スイッチ/ケースを取り除き、慎重に実装することで、現在は10倍高速になっています。 – NOP