具有时间序列的值,我想将其重新整形为nx4矩阵[X y],以便将这些值用作机器学习算法的输入和输出值。
X(i)是1x3输入向量,y是输出标量值。
该算法每隔2个序列值(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,:)...]
有谁知道如何交错两个(或更多)矩阵的行?
答案 0 :(得分: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
答案 1 :(得分: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)
答案 2 :(得分:2)
祝你好运:)弄清楚那些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
答案 3 :(得分: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