对于以下问题,有没有更可靠的方法:
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
但是,我想找到一种替代方法,即不涉及循环的方法。
使用线性索引:
ii = 1:length(d);
linear_index = sub2ind(size(d),ii,I(ii));
q = d(linear_index);
sub2ind 将行 ( ii
) 和列 (I(ii)
) 索引转换为线性索引,您可以使用线性索引一次抓取所有需要的元素。