Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我想从向量生成一个“阶梯状”的矩阵。
输入向量示例: [8 12 17] 输出矩阵示例: [1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1] 是否有比以下方法更简单(或内置)的方法? function M = stairstep(v) M = zeros(length(v),max(v)); v2 = [0 v]; for i = 1:length(v) M(i,(v2(i)+1):v2(i+1)) = 1; end 回答: 我不知道有内置函数可以执行此操作,但是这是一个矢量化解决方案: v = [8 12 17]; N = numel(v); M = zeros(N,max(v)); M([0 v(1:N-1)]*N+(1:N)) = 1; M(v(1:N-1)*N+(1:N-1)) = -1; M = cumsum(M,2); 编辑:我喜欢乔纳斯必须使用BLKDIAG的想法。在我进一步缩短这个想法之前,我忍不住想了一下 (使用MAT2CELL而不是ARRAYFUN ): C = mat2cell(ones(1,max(v)),1,diff([0 v])); M = blkdiag(C{:}); 更多&回答... |
![]() |
![]() |