【问题标题】:Make matrix from shifted vector matlab vectorization从移位向量matlab向量化制作矩阵
【发布时间】:2013-10-24 08:17:05
【问题描述】:

你好,这是一个小问题。

我有一个向量 v (size(v) = T), 一个正数 P, P

M = [v(T),     v(T-1), ....., v(T-N+2),   v(T-N+1);
     v(T-1),   v(T-2), ....., v(T-N+1),   v(T-N)  ;
     v(T-2),   v(T-3), ....., v(T-N),     v(T-N-1);
        .        .       .       .           .    ;
        .        .       .       .           .    ;
     v(T-P+1), v(T-P), ....., v(T-P-N+3), v(T-P-N+2)]

它认为 T > P + N。

举个例子。

v = [1, 2, 3, 4, 5]';
P = 3;
N = 3;
M = [5, 4, 3;
     4, 3, 2;
     3, 2, 1]

我知道如何使用 for 循环来做到这一点,但我也认为可以通过矢量化来做到这一点 - 这里的问题是 - 我不太擅长矢量化。

感谢提示等:))

【问题讨论】:

  • 请发布您的循环代码
  • 在你的例子中你也会有v(T-P-N)在右下角是v(5-3-3)这是v(-1)这是未定义的。请修正你的约束。我假设 P + N
  • 抱歉,我刚刚发布答案后就看到了错误。
  • 还是错了。例如 P=4 和 N=4 根据您的约束是有效的。但它们不会起作用。
  • 假设哪个 T?有 T > P + N。

标签: matlab vector matrix vectorization


【解决方案1】:

使用Hankel 矩阵:

v = [1 2 3 4 5];
T = length(v);
P = 3;
N = 3;
out = hankel(v(T:-1:T-P+1),v(T-P+1:-1:T-P-N+2));

【讨论】:

    【解决方案2】:

    您可以使用bsxfun

    v = [1, 2, 3, 4, 5]';
    P = 3;
    N = 3;
    idx = bsxfun(@minus, length(v):-1:length(v)-N+1, (0:P-1)');
    
    result  = v(idx);
    

    这将导致

    result =
    
         5     4     3
         4     3     2
         3     2     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 2015-04-27
      • 1970-01-01
      相关资源
      最近更新 更多