首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向矢量化Matlab代码以选择矩阵的特定指标

向矢量化Matlab代码以选择矩阵的特定指标
EN

Stack Overflow用户
提问于 2017-12-07 16:16:33
回答 2查看 38关注 0票数 2

我在Matlab中有一个维数A的矩阵Nx(N-1)

代码语言:javascript
复制
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第四列的第一个A元素和

2) N-i列的最后一个i元素。

注意,对于i=1Ai-1第四列不存在,因此跳过了1);类似地,对于i=NAi第四列不存在,因此跳过了2)。

在上面的例子中

代码语言:javascript
复制
B=[5  1  2  3  4
   9  10 6  7  8
   13 14 15 11 12
   17 18 19 20 16];

这个代码能做我想做的事。我请求你的帮助,以一种有效的方式矢量图。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-07 17:09:26

提取A的上下三角矩阵。然后用“对角线移位”重新组装它们:

代码语言:javascript
复制
u = triu(A);
l = tril(A,-1);
B = padarray(u(1:end-1,:),[0 1],'pre') + padarray(l(2:end,:),[0 1],'post');
票数 3
EN

Stack Overflow用户

发布于 2017-12-07 17:31:27

另一种使用逻辑索引triltriu相结合的有效方法

代码语言:javascript
复制
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))));

结果:

代码语言:javascript
复制
>> B

B =

     5     1     2     3     4
     9    10     6     7     8
    13    14    15    11    12
    17    18    19    20    16
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47699321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档