-1

对于以下问题是否有更强大的方法:

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  

在这里,I 是指示需要矩阵的哪一列的索引。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    

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

4

1 回答 1

3

使用线性索引:

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

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

于 2012-11-15T16:05:34.497 回答