【问题标题】:need a fast way to make a calculation in matlab [duplicate]需要一种在matlab中进行计算的快速方法[重复]
【发布时间】:2016-10-04 15:45:21
【问题描述】:

我需要通过这样的向量重塑以下矩阵。 没有 for 循环。

。要制作矩阵,我需要把向量的元素按相同的顺序排列,然后我移位一个元素,再写一遍。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    只需使用索引,然后重塑

    mymat = reshape(myvec([1:5 2:6 3:7]),[],3);
    

    进一步自动化一点

    myvec = 99:-1:80; % Some vector 
    number_of_columns = 4;
    window_length = 5;
    
    ind = kron(ones(number_of_columns,1),[1:window_length]') + ...
        kron([0:number_of_columns-1]',ones(window_length,1));
    Mymat = reshape(myvec(ind),[],number_of_columns);
    

    【讨论】:

    • 是否有可能使该解决方案适用于不同的输入数组?
    • @AlexisClarembeau 添加了更多细节
    【解决方案2】:

    naïve 实现将使用简单的循环和数组切片,例如:

    tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
    w = 3 
    n = length(tab)
    output = []
    for i = 1:n - w +1 
      output(i,:) = tab(i:i+w-1)'
    end 
    

    您还可以使用 hankel 矩阵来避免循环。

    tab = ['x' 'y' 'z' 'w' 't' 'k' 'l']'
    n = length(tab)
    w = 3
    
    han = hankel(1:length(tab), 1:3)
    
    output = []
    arrayfun(@(x) tab(x),han(1:n-w+1,:))
    

    但是,如果您不想要一个真正快速的实现,您可以使用图像处理调色板中的滑动窗口功能映射,例如 colfilt

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多