查看: 111|回复: 3|关注: 0

[已解决] 矩阵每行第一位依次补充0

[复制链接]

新手

12 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
请教下,一个矩阵如:[1, 2, 3, 0, 0; 4, 5, 6, 0, 0; 7, 8, 9, 0, 0; 10, 11, 12, 0, 0; 13, 14, 15, 0, 0]
如何使从第一行至第n行,每行开始第一位依次补充0至n个零,即最后结果为:
[1, 2, 3, 0, 0, 0, 0, 0, 0;
0, 4, 5, 6, 0, 0, 0, 0, 0;
0, 0, 7, 8, 9, 0, 0, 0, 0;
0, 0, 0, 10, 11, 12, 0, 0, 0;

请问下,有什么合适的matlab函数可以表示吗?

新手

42 麦片

财富积分


050


4

主题

79

帖子

7

最佳答案
发表于 2018-8-8 20:42:58 | 显示全部楼层
本帖最后由 dcpengjin 于 2018-8-8 20:44 编辑

用循环或者@函数吧。

比如这样:
  1. A=[1, 2, 3, 0, 0; 4, 5, 6, 0, 0; 7, 8, 9, 0, 0; 10, 11, 12, 0, 0; 13, 14, 15, 0, 0];

  2. for i=1:5;
  3.     S=A(i,:);
  4.     number_zeros=length(find(S==0));
  5.     residual_number=6-number_zeros;
  6.     S=[zeros(1,residual_number),S];
  7.     K(i,:)=S;
  8. end
复制代码

论坛优秀回答者

权威

7845 麦片

财富积分



5

主题

9269

帖子

1792

最佳答案
  • 关注者: 407
发表于 2018-8-8 21:30:50 | 显示全部楼层 |此回复为最佳答案
  1. c=[a zeros(5,4)];
  2. b=cell2mat(arrayfun(@(k) circshift(a(k,:),k-1,2),1:5,'un',0)')
复制代码

其实本质上还是循环

论坛优秀回答者

专家

2348 麦片

财富积分


20003000


1

主题

2573

帖子

529

最佳答案
  • 关注者: 92
发表于 2018-8-8 21:40:21 | 显示全部楼层
  1. A=[1, 2, 3, 0, 0; 4, 5, 6, 0, 0; 7, 8, 9, 0, 0; 10, 11, 12, 0, 0; 13, 14, 15, 0, 0];
  2. S=full(spdiags(A(:,1:3),0:2,5,9))
复制代码

S =
     1     2     3     0     0     0     0     0     0
     0     4     5     6     0     0     0     0     0
     0     0     7     8     9     0     0     0     0
     0     0     0    10    11    12     0     0     0
     0     0     0     0    13    14    15     0     0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表