質問

正規表現のようなマトリックスでパターンを検索できるライブラリ(任意の言語)はありますか?マトリックスの定期的な経験、またはマトリックスパターン検索方法のようなもの?

役に立ちましたか?

解決

Jを使用することを嫌悪しない場合、2つの行列が等しいかどうかを確認できます。 -: (一致)オペレーター。例えば:

   X =: 4 3 $ i.12
   X
0  1  2
3  4  5
6  7  8
9 10 11
   Y =: 4 3 $ (1+i.12)
   Y
 1  2  3
 4  5  6
 7  8  9
10 11 12
   X -: X
1
   X -: Y
0

マッチオペレーターの優れた機能の1つは、任意の次元の配列を比較するために使用できることです。もしも A 3x3x4アレイです B 次に、2x1アレイです A-:B 戻り値 0.

マトリックスが別のマトリックスのサブマトリックスであるかどうかを確認するには、 E: (インターバルのメンバー)SOのオペレーター:

 X =: 2 2 $ 1 2 4 5  
   X
1 2
4 5
   Y =: 4 3 $ (1+i.12)
   Y
 1  2  3
 4  5  6
 7  8  9
10 11 12
   X E. Y
1 0 0
0 0 0
0 0 0
0 0 0

結果の左上にあるのは、xに等しいyの部分が左上隅として指定されたピクセルを持っていることを意味します。この理由は、yに埋め込まれたxの重複コピーがいくつかある可能性があり、1つのピクセルにフラグを立てるだけで、すべての一致するタイルの位置を見ることができます。

他のヒント

私は2つのことを見つけました: gawk そしてa perl 脚本。

文字列の正規表現が機能するため、それは別の問題です(例: sed, grep)1次元文字列のワークライン。

マトリックスが1次元(基本的にベクトル)でない限り、これらのプログラムと使用するアルゴリズムは機能しません。

幸運を!

Aho-Corasick(Time O(Matrix Size))を使用して、入力マトリックスの各行のパターンの行を検索するだけです。結果は、最終結果にすばやく結合するのに十分なほど小さい必要があります。

私は1より高い寸法の正規表現のようなものが存在するとは思わないが、パターンのクラスではなく正確なパターンに合わせたい場合は、畳み込みを読むことをお勧めするかもしれません(またはむしろあなたが 相互相関 )

その理由は、これを自分で達成したいよりも速くこれを行うための多くの高度に最適化されたライブラリ関数(例えばIPP)があります。また、この方法は高次元にもスケーリングします。

また、これは必ずしも「一致」を与えるわけではなく、そのピークが探しているパターンの四角係数の合計に等しい場合に一致する相関マップの「ピーク」を与えるものではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top