在下面的代碼中,「G」返回一個(10 * 4)矩陣,其方向正確。在正確的方向上輸入四維數組中的元素
我想要的就是能夠查看/調用由(j,k)索引的這些(10 * 4)矩陣。但是,當我將矩陣「G」存儲在4-D矩陣「測試」中時,數據顯示的方式有點不直觀?當我看到測試的變量編輯我得到:
val(:,:,1,1) =
1
val(:,:,2,1) =
0
val(:,:,3,1) =
0
val(:,:,4,1) =
0
。 。 。 val(:,:,1,10) =
1
val(:,:,2,10) =
0
val(:,:,3,10) =
0
val(:,:,4,10) =
0
因此,所有的數據是存在的,但我希望它顯示在一個10 * 4矩陣?
同樣,你會看到我必須更改「Correl_betas」的代碼並轉置「G」才能到達上面的位置。但是我覺得我是通過玩弄而不是我認爲代碼應該做的。爲什麼原始代碼不起作用?當聲明「Correl_betas」然後通過G的轉置時,我不得不改變第三和第四維的順序,但是這似乎完全違反了原始「Correl_betas」和原始(未轉置)的最後兩個維度)「G」也匹配?但是當我這樣做時,排序似乎比我想要的10 * $矩陣更遠。
所以我有2個問題?
1.)我怎樣才能到達我想從哪裏獲得j,k索引的二維(10 * 4)矩陣?
2.)上面的原始代碼怎麼沒有導致最後兩列產生(10,4)矩陣?
問題的一大部分是,我對使用超過2維的矩陣的工作經驗很少,所以如果這個問題顯示缺乏理解,那麼很抱歉。也許一個關於如何解釋操作更高維矩陣的上帝教程指針也會有所幫助。
%Correl_betas=zeros(50,50,10,4);
Correl_betas=zeros(50,50,4,10);
mats=[1:10]';
L1=-1;
for j=1:51
L1=L1+1;
L2=-1;
for k=1:51
L2=L2+1;
lambda=[ L1; L2 ];
nObs=size(mats,1);
G= [ones(nObs,1) (1-exp(-mats./lambda(1)))./(mats./lambda(1)) ((1-exp(-mats./lambda(1)))./(mats./lambda(1))-exp(-mats./lambda(1))) ((1-exp(-mats./lambda(2)))./(mats./lambda(2))-exp(-mats./lambda(2)))];
%Correl_betas(j,k,:,:)=G;
Correl_betas(j,k,:,:)=G';
test=Correl_betas(j,k,:,:);
temp1=corrcoef(Correl_betas(j,k,:,2),Correl_betas(j,k,:,3),'rows','complete');
temp2=corrcoef(Correl_betas(j,k,:,2),Correl_betas(j,k,:,4),'rows','complete');
temp3=corrcoef(Correl_betas(j,k,:,3),Correl_betas(j,k,:,4),'rows','complete');
F2_F3(j,k)=temp1(1,2);
F2_F4(j,k)=temp2(1,2);
F3_F4(j,k)=temp3(1,2);
end
end
你也可以找到'squeeze'函數有幫助。 – Frederick