ベクトルから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])
は、行と列を入れ替えることで、単純な転置を計算しますので、
「リセット中」の動作を理解できません。いくつかのコンテキストを提供できますか?反復されない行を要求することは意味をなさない。 – stephematician
はい、行列はニューロン間の相関を表します。私は、4つのニューロンのグループの相関構造を調べようとしています。したがって、各4つのニューロンは、一度しか測定できませんでした。私は彼がリセットする前に行列が4含まれているthionk!彼らはすべての命令を受けるため、4つのグループに分かれています。私はそれをこのように残すことができるが、これはプログラムが遅くなる恐れがある。 – user135172