2

有了时间序列的值,我想把它重塑成一个 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,:)...]

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

4

4 回答 4

5

尝试

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

于 2013-07-20T20:49:19.747 回答
4

有这个单线选项

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)
于 2013-07-20T21:31:44.797 回答
2

Good luck :) figuring out what's going on with those 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,[])'

the result

ans =
     1     3     5     7
     2     4     6     8
     9    11    13    15
    10    12    14    16
于 2013-07-20T22:07:25.913 回答
1

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

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
于 2013-07-20T22:35:19.247 回答