Help me vectorize this code

6 ビュー (過去 30 日間)
VisLab
VisLab 2013 年 11 月 7 日
編集済み: Andrei Bobrov 2013 年 11 月 8 日
for x=1:1:rows
for y=1:1:cols
RE_p(y,x) = RE(y,x,bestori_map(y,x));
RO_p(y,x) = RO(y,x,bestori_map(y,x));
end
end
- RE, RO: arrays of size cols*rows*8;
- bestori_map: array of size cols*rows;
what is the best way (and/or fastest) to vectorize this piece of code withouth the need of for cycles ?
Thank you
  2 件のコメント
Cedric
Cedric 2013 年 11 月 7 日
編集済み: Cedric 2013 年 11 月 7 日
What are RE, RO, and bestori_map?
VisLab
VisLab 2013 年 11 月 8 日
編集済み: VisLab 2013 年 11 月 8 日
RE, RO - arrays of size cols*rows*8
bestori_map - array of size cols*rows

サインインしてコメントする。

採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 11 月 8 日
s = size(RE);
[ii,jj] = ndgrid(1:s(1),1:s(2));
ij = sub2ind(s,ii(:),jj(:),bestori_map(:));
RE_p = reshape(RE(ij),s(1:2));
RO_p = reshape(RO(ij),s(1:2));
  1 件のコメント
VisLab
VisLab 2013 年 11 月 8 日
Works like a charm!
If you'd care to briefly explain the process it would be awesome.
Thank you very much :)

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2013 年 11 月 7 日
編集済み: Andrei Bobrov 2013 年 11 月 8 日
[X, Y] = ndgrid(1:rows, 1:cols);
X = X(:);
Y = Y(:);
Z = reshape( bestori_map(1:rows,1:cols), [], 1);
linidx = sub2ind(size(RE), X,Y, Z);
RE_p(1:rows,1:cols ) = reshape(RE(linidx),rows, cols );
linidx = sub2ind(size(RO), X, Y, Z);
RO_p(1:rows,1:cols) = reshape(RO(linidx),rows, cols, );
Note: if RE and RO are the same size then you can re-use linidx instead of re-calculating it.
  4 件のコメント
Andrei Bobrov
Andrei Bobrov 2013 年 11 月 8 日
Hi VisLab! Your RO and RE - functions or arrays?
VisLab
VisLab 2013 年 11 月 8 日
arrays of cols*rows*8 size (RE,RO) and cols*rows (RE_p,RO_p, bestori_map), respectively.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSoftware Development Tools についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by