2012-12-04 11 views
6

を取得する私のようなN×M行列mを持っています-ループ。は、すべての部分行列に

結果sは、P×Q×((N-P + 1)・(M-Q + 1))の行列でなければなりません。

など。 P = Q = 3の場合:

s(:,:,1) = [1 2 3; 5 6 7; 9 10 11] 
s(:,:,2) = [2 3 4; 6 7 8; 10 11 12] 
s(:,:,3) = [5 6 7; 9 10 11; 13 14 15] 
s(:,:,4) = [6 7 8; 10 11 12; 14 15 16] 
+0

複数の理由は何ですか?例えば。 「5 6 7」が2回現れる。 – Jonas

+0

@Jonas申し訳ありませんが、私の例は混乱していました。今理解しやすいですか? – kay

+0

いいえ、私はまだよく分かりません:どうしてあなたは重複したエントリーをしたいですか?あなたの配列を埋めることができるだけですか?また、私の解決策を見たことがありますか? – Jonas

答えて

6

im2colがここであなたを助けることができます。

m = 
    1  2  3  4 
    5  6  7  8 
    9 10 11 12 
    13 14 15 16 

>> P = 3; Q = 3; 
>> columnized = im2col(m,[P Q],'sliding'); 
>> nMatrices = size(columnized,2); 
>> s = reshape(columnized, [P Q nMatrices]) 

s(:,:,1) = 
    1  2  3 
    5  6  7 
    9 10 11 
s(:,:,2) = 
    5  6  7 
    9 10 11 
    13 14 15 
s(:,:,3) = 
    2  3  4 
    6  7  8 
    10 11 12 
s(:,:,4) = 
    6  7  8 
    10 11 12 
    14 15 16 

im2col'sliding'オプションは、すべての重複部分行列を発見し、(P・Q)-elementとしてそれぞれを返して列ベクトルはcolumnizedです。 P×Q×((N-P + 1)・(N-P + 1)・(M-Q + 1))行にこの(P・Q)× M-Q + 1))1である。

関連する問題