我在维度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
个元素。
请注意,对于i
,A
的{{1}}列不存在,因此跳过1);同样,对于i=1
,i-1
的{{1}}列不存在,因此会跳过2)。
在上面的例子中
A
此代码可以满足我的需求。我请求你帮助以有效的方式进行矢量化。
i=N
答案 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 indexing与tril
和triu
相结合的另一种有效方法:
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