【问题标题】:Matlab: Create a matrix from a row vector according to specificationsMatlab:根据规范从行向量创建矩阵
【发布时间】:2014-05-30 08:05:00
【问题描述】:

我在 ma​​tlab 工作。我有一个行向量in 和一个标量数fuzzy_no。我想创建一个大小为fuzzy_no x (numel(in)-fuzzy_no) 的矩阵output。这样矩阵outputith col 具有来自行向量ini:i+fuzzy_no-1 的元素。

换句话说,我想在不使用循环的情况下实现以下循环

n = numel(in);
output = zeros(fuzzy_no,n-fuzzy_no);
for i = 1:size(output,2)
   output(:,i) = in(1,i:i+fuzzy_no-1);
end

【问题讨论】:

    标签: matlab


    【解决方案1】:

    请注意,在您的示例中,in 中的最后一个元素在 output 中丢失。假设你想要所有元素,你可以像这样使用索引:

    [ii, jj] = meshgrid(1:fuzzy_no, 0:n-fuzzy_no);
    output = in(ii+jj)
    

    或者您可以使用更令人满意的 hankel 内置:

    output = hankel(in(1:fuzzy_no), in(fuzzy_no:end))
    

    【讨论】:

    • 我需要丢失最后一个元素。所以,在hankel 中使用end = numel(in)- 1 对我来说效果很好,谢谢。
    【解决方案2】:

    试试这个 -

    n = numel(in);
    lim1 = n-fuzzy_no
    
    t1 = bsxfun(@times,in',ones(1,lim1)) %//'
    uind = triu(ones(size(t1)),1)>0
    lind = [zeros(fuzzy_no,lim1) ; tril(ones([size(t1,1)-fuzzy_no lim1]))]>0
    t1(uind | lind)=[];
    output = reshape(t1,fuzzy_no,n-fuzzy_no)
    

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多