-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  

ここで、私はマトリックスのどの列が必要かを示すインデックスです。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 に答える