矢量化Matlab代码以拾取矩阵的特定索引
我在Matlab中有一个矩阵矢量化Matlab代码以拾取矩阵的特定索引,matlab,Matlab,我在Matlab中有一个矩阵a,它的维数Nx(N-1),例如 N=5; A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16; 17 18 19 20]; 我想以某种方式重新排列A的元素。具体而言,我想创建一个维度为(N-1)xN的矩阵B,以便: 对于i=1,…,N B(:,i) 1) i-1第列A的第一个i-1元素,以及 2) A第i列的最后N-i元素 请注意,对于i=1,A的i-1第列不存在,因此跳过1);类似地,
a
,它的维数Nx(N-1)
,例如
N=5;
A=[1 2 3 4;
5 6 7 8;
9 10 11 12;
13 14 15 16;
17 18 19 20];
我想以某种方式重新排列A
的元素。具体而言,我想创建一个维度为(N-1)xN
的矩阵B
,以便:
对于i=1,…,N
B(:,i)
1) i-1
第列A
的第一个i-1
元素,以及
2) A
第i
列的最后N-i
元素
请注意,对于i=1
,A
的i-1
第列不存在,因此跳过1);类似地,对于i=N
,A
的i
第列不存在,因此跳过2)
在上面的例子中
B=[5 1 2 3 4
9 10 6 7 8
13 14 15 11 12
17 18 19 20 16];
这个代码符合我的要求。我请求你的帮助以一种有效的方式引导它
B=zeros(N-1,N);
for i=1:N
if i>1 && i<N
step1=A(1:i-1,i-1);
step2=A(i+1:N,i);
B(:,i)=[step1;step2];
elseif i==1
B(:,i)=A(i+1:N,i);
elseif i==N
B(:,i)=A(1:i-1,i-1);
end
end
B=0(N-1,N);
对于i=1:N
如果i>1&&i提取A
的上下三角矩阵。然后用“对角移位”重新组装:
另一种有效的方法是结合使用和:
结果:
>> B
B =
5 1 2 3 4
9 10 6 7 8
13 14 15 11 12
17 18 19 20 16
B = zeros(size(A'));
B(tril(true(size(B)))) = A(tril(true(size(A)), -1));
B(triu(true(size(B)), 1)) = A(triu(true(size(A))));
>> B
B =
5 1 2 3 4
9 10 6 7 8
13 14 15 11 12
17 18 19 20 16