矢量化Matlab代码以选择矩阵的特定索引

时间:2017-12-07 16:16:34

标签: matlab

我在维度A的Matlab中有一个矩阵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的元素。具体来说,我想创建一个维度为B的矩阵(N-1)xN,以便:

代表i=1,...,N

B(:,i)收集

1)i-1的{​​{1}}列的第一个i-1元素和

2)A的{​​{1}}列的最后N-i个元素。

请注意,对于iA的{​​{1}}列不存在,因此跳过1);同样,对于i=1i-1的{​​{1}}列不存在,因此会跳过2)。

在上面的例子中

A

此代码可以满足我的需求。我请求你帮助以有效的方式进行矢量化。

i=N

2 个答案:

答案 0 :(得分:3)

提取A的下三角矩阵和上三角矩阵。然后用#34;对角线移位"

重新组装它们
u = triu(A);
l = tril(A,-1);
B = padarray(u(1:end-1,:),[0 1],'pre') + padarray(l(2:end,:),[0 1],'post');

答案 1 :(得分:0)

使用logical indexingtriltriu相结合的另一种有效方法:

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