从矩阵中提取时间序列的列条目

时间:2012-11-15 15:31:55

标签: matlab time-series

是否有更强大的方法解决以下问题:

d = 1+(20-1).*rand(365,5);
bthD = 1:5;
I = repmat(bthD',73,1);

for i = 1:length(d);
    q(i) = d(i,I(i));
end  

这里,我是指示矩阵的哪一列是必需的索引。 q是我们每行都有一个由I指定的相应列号的结果。是否有另一种方法可以找到q?

修改后的问题:

我有数据:

d = 1+(20-1).*rand(365,5);

我想找到与I:

中的索引相对应的每一行中的值
I = floor(1+(5-1).*rand(365,1));

这可以通过使用for循环轻松实现:

for i = 1:length(d);
    q(i) = d(i,I(i));
end    

但是,我想找到另一种方法,即不涉及循环的方式。

1 个答案:

答案 0 :(得分:3)

使用线性索引:

ii = 1:length(d);
linear_index = sub2ind(size(d),ii,I(ii));
q = d(linear_index);

sub2ind将行(ii)和列(I(ii))索引转换为线性索引,您可以使用它们一次性获取所有需要的元素。