我试图从矢量中获取一个4维矩阵然后重置它 降低triangel'。 例如,如果我的原始向量是二维的:A = [1 2]'那么我想我的初始矩阵是:
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。我可以这样离开,但我认为这可能会减慢程序..
答案 0 :(得分:1)
Permute交换尺寸,例如
C = [1:3;4:6];
permute(C, [2 1])
通过交换行和列来计算简单的转置。 [2 1]
参数表示C
的第2维和第1维映射到结果中的第1维和第2维。每个'新'维度按顺序指定。因此[3 2 1]
会将第3,第2和第1维度作为新的第1,第2和第3维度。
permute(C, [3 2 1])
ans =
ans(:,:,1) =
1 2 3
ans(:,:,2) =
4 5 6
在结果中第3维= 1的位置找到行{1的C
元素。类似地,在结果中第3维= 2的位置找到C
的行= 2的元素。
仍然可以找到列数为1的C
元素,其中结果中列= 1(依此类推),因为列维度已映射到自身。
结果的行是有趣的维度,由于C
没有第三维,因此它是单例(即只有一行)。
解决问题的第一部分,可以通过
获取C
的正确输出
A = [1 2]'*[1 2];
C = bsxfun(@times, permute(A, [4,3,1,2]), A);
我需要更多关于你想要最终行为的信息('重置下三角形'),因为我不清楚你想要什么。
可能对您有用的函数是triu
函数,它提取矩阵的上三角分量。