2016-11-29 3 views
0

ベクトルから4次元行列を取り出して、それを の 'lower triangel'にリセットしようとしています。例えば 、私の元のベクトルが2次元である場合:A = [1 2]」、私は私の初期行列がになりたい:ベクトルから4次元の行列を作成し、それを '下三角形'にリセットする方法

C(:,:,1,1) = [1*1*1*1 1*1*1*2 ; 1*1*2*1 1*1*2*2] = [ 1 2 ; 2 4] 
C(:,:,2,1) = [2*1*1*1 2*1*1*2 ; 2*1*2*1 2*1*2*2] = [ 2 4 ; 4 8] 
C(:,:,1,2) = [1*2*1*1 1*2*1*2 ; 1*2*2*1 1*2*2*2] = [ 2 4 ; 4 8] 
C(:,:,2,2) = [2*2*1*1 2*2*1*2 ; 2*2*2*1 2*2*2*2] = [ 4 8 ; 8 16] 

そこでCである:

C(:,:,1,1) = [ 1 2 ; 2 4] C(:,:,2,1) = [ 2 4 ; 4 8] 
C(:,:,1,2) = [ 2 4 ; 4 8] C(:,:,2,2) = [ 4 8 ; 8 16] 

とリセット後私はそれが欲しいです:

C(:,:,1,1) = [ 1 2 ; 2 4] C(:,:,2,1) = [ 0 0 ; 0 0] 
C(:,:,1,2) = [ 0 0 ; 4 8] C(:,:,2,2) = [ 0 0 ; 8 16] 

私はそれが欲しいです。

私は、次のコードを試してみました:

A = [1 2]'; 
C = bsxfun(@times, permute(C, [4 3 2 1]), C*C'); 
disp('C before reset is:'); 
disp(C); 

for k = 2:size(C, 4) 
    C(1:k-1,:,k) = 0; 
end 

disp('C after reset is:'); 
disp(C); 
disp('The size of C is:'); 
disp(size(C)); 

をしかし出力は、次のとおりです。

BB before reset is: 
(:,:,1,1) = 
    1  2 
    2  4 
(:,:,1,2) = 
    2  4 
    4  8 
C after reset is: 
(:,:,1,1) = 
    1  2 
    2  4 
(:,:,1,2) = 
    0  0 
    4  8 
The size of BB is: 
    2  2  1  2 

私は何を逃したのですか? 私はラインの背後にあるものを理解していないと思う:

C = bsxfun(@times, permute(C, [4 3 2 1]), C*C'); 

が行[4 3 2 1]の各数値の意味は何ですか?

ありがとうございます!

編集注:マトリックスは、ニューロン間の相関関係を表します。私は、4つのニューロンのグループの相関構造を調べようとしています。したがって、各4つのニューロンは、一度しか測定できませんでした。私は彼がリセットする前にマトリックスが4を含んでいると思う!時間、4のすべてのグループ、彼らはすべての順序でapearので。例えば

C = [1:3;4:6]; 

permute(C, [2 1]) 

は、行と列を入れ替えることで、単純な転置を計算しますので、

+0

「リセット中」の動作を理解できません。いくつかのコンテキストを提供できますか?反復されない行を要求することは意味をなさない。 – stephematician

+0

はい、行列はニューロン間の相関を表します。私は、4つのニューロンのグループの相関構造を調べようとしています。したがって、各4つのニューロンは、一度しか測定できませんでした。私は彼がリセットする前に行列が4含まれているthionk!彼らはすべての命令を受けるため、4つのグループに分かれています。私はそれをこのように残すことができるが、これはプログラムが遅くなる恐れがある。 – user135172

答えて

1

入れ替えは寸法を交換..私はこのようにそれを残すことができるが、私はそれはプログラムを遅らせるかもしれないと思うのです。 [2 1]引数は、Cの2番目と1番目のディメンションが結果の1番目と2番目のディメンションにマップされていることを意味します。各「新しい」次元は、順番に指定されます。したがって、[3 2 1]は、第3、第2、第1次元を新しい第1、第2、第3次元にします。行= 1 C

permute(C, [3 2 1]) 

ans = 

ans(:,:,1) = 

    1 2 3 

ans(:,:,2) = 

    4 5 6 

要素はここに見られる結果に3次元= 1。同様に、結果が3次元= 2の場合、行= 2のCの要素が見つかります。

要素がの列= 1の場合でも、列の次元がそれ自身にマップされているため、結果の中でcolumn = 1が見つかる(など)。

結果の行は興味深い次元であり、結果はCの3次元を持たない結果、シングルトン(つまり、1行しかありません)です。あなたの問題の最初の部分をアドレッシング

Cの正しい出力は、私はあなたが最後の行動が(「下三角をリセット」)になりたいかについてのより多くの情報が必要になり

A = [1 2]'*[1 2]; 
C = bsxfun(@times, permute(A, [4,3,1,2]), A); 

することによって得ることができますあなたが望むものが私には不明であるからです。

便利な機能は、マトリックスの上三角成分を抽出するtriu関数です。

+0

OK。私はこれを訂正し、resetinの問題に対する解決策を見つけようとします。ありがとう!! – user135172

関連する問題