-1

私の入力は、一種の単純なベクトルです。

vector=[1 2 3 2 3 4 1 1 2]; 

(1 ~ 4 の数字のみ)、行がすべて可能な 2 つの数字の組み合わせ (この場合は 16 行、たとえば、行 1 は 11、行 2 は 12 など) である行列を作成したいと考えています。ベクトルの長さから 1 を引いたものと同じ列数 (8)。

行列の各セルには、特定の組み合わせがベクトル内で特定の相対距離 (列の数) で見つかった回数が保持されます。例えば:

matrix(1,1)=1 (1 は 1 から別の 1 への相対距離内で 1 回検出される) matrix(1,6)=1 (1 は別の 1 から 6 の相対距離内で 1 回検出される)
マトリックス( 2,1)=2 (1 から別の 2 までの相対距離内で 1 が 2 回検出される)

matlab にそれを行う機能があるかどうかは誰にもわかりませんか? (またはそれに近い?)(ループではなく、「strfind」などを使用して、私はそれらを知っています)。

誰かが私が使用できる特定の機能を知っているなら、私に知らせてください!

ありがとうございました

4

2 に答える 2

2

共起の数、つまり 2 つの数値が一緒に現れる回数だけに関心がある場合は、Matlab 関数「graycomatrix」を使用して、グレー レベルの共起行列を得ることができます。

行列で使用することを意図しているため、ベクトルを行列に変換する必要があります。たとえば、ゼロで埋めます。

vector=zeros(9);
vector(1,:)=[1 2 3 2 3 4 1 1 2];
[glcm] = graycomatrix(vector,'NumLevels',5,'G',[])

次の結果が得られます。

glcm =

    64     0     0     0     0
     0     1     2     0     0
     0     0     0     2     0
     0     0     1     0     1
     0     1     0     0     0

最初の行と列は値 0 に対応するため、無視できます。

glcm(:,1)=[];
glcm(1,:)=[];
glcm


glcm =

     1     2     0     0
     0     0     2     0
     0     1     0     1
     1     0     0     0

これで、各組み合わせの共起の数がわかりました。たとえば、glcm(1,1) は 2 つの 1 が一緒に現れる回数、glcm(1,2) は 1 と 2 が一緒に現れる回数を示します...

しかし、あなたが求めていることを実行できる関数は見つかりませんでした。これは、距離を考慮したものです。だから、ループしてやる必要があると思います。

于 2013-01-17T15:24:29.720 に答える
0

Matlab にはそれを行う機能がありません。ループは確かに、それを実行するための最も簡単な方法のようです。

于 2013-01-17T14:01:35.493 に答える