Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
矢量化Matlab代码以拾取矩阵的特定索引_Matlab - Fatal编程技术网

矢量化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);类似地,

我在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);类似地,对于
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