【问题标题】:How to reshape and interleave matrix elements?如何重塑和交错矩阵元素?
【发布时间】:2013-07-20 20:42:27
【问题描述】:

有了时间序列的值,我想把它重塑成一个 nx4 矩阵 [X y],目的是使用这些值作为机器学习算法的输入和输出值。

X(i) 是一个 1x3 输入向量,y 是输出标量值。

该算法将每第二个序列值(3 个值)作为输入,以预测第 4 个值。

举个实际的例子,假设我们有一个序列

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

[X y] 矩阵应如下所示:

[1 3 5 7; 2 4 6 8; 9 11 13 15; 10 12 14 16]

为了获得每隔一行,我编写了以下代码:

vec1 = timeSeries(1:2:end);
XyVec1 = reshape(vec1,4,[])' 

同样可以写成偶数:

vec2 = timeSeries(2:2:end);
XyVec2 = reshape(vec2,5,[])'

我不知道怎么做的事情是交错矩阵 vec1 和 vec2 行得到

[vec(1,:); vec2(1,:);vec1(2,:), vec2(2,:)...]

有人知道如何交错两个(或更多)矩阵的行吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    试试

    result = zeros(size(vec1,1)+size(vec2,1),size(vec1,2));
    result(1:2:end,:) = vec1;
    result(2:2:end,:) = vec2;
    

    重用matlab索引工具,在正确的行中插入元素

    八度音阶模型示例:http://ideone.com/RVgmYA

    【讨论】:

      【解决方案2】:

      有这个单行选项

      result = kron(vec1, [1;0]) + kron(vec2, [0;1]);
      

      但是,@Joel Falcou 更快。将输入向量设置为

      vec1 = rand(1000,1000);
      vec2 = -rand(1000,1000);
      

      它给了

      Elapsed time is 0.007620 seconds. (indexing)
      Elapsed time is 0.054607 seconds. (kron)
      

      【讨论】:

      • 预分配结果,我认为 timign 将大致相等
      • 看起来 kron 并没有那么优化。
      【解决方案3】:

      祝你好运 :) 搞清楚reshape(), permutes() 发生了什么:

      a = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];
      reshape(permute(reshape(a,2,4,[]),[2,1,3]),4,[])'
      

      结果

      ans =
           1     3     5     7
           2     4     6     8
           9    11    13    15
          10    12    14    16
      

      【讨论】:

        【解决方案4】:

        您可以使用问题末尾提到的交错向量

        reshape([vec1, vec2]', 4, [])'
        

        vec1 =
             1     3     5     7
             9    11    13    15
        
        vec2 =
             2     4     6     8
            10    12    14    16
        

        返回

        >> reshape([vec1, vec2]', 4, [])'
        ans =
             1     3     5     7
             2     4     6     8
             9    11    13    15
            10    12    14    16
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-17
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多