フィルターのクリア

find value of matrix by position

1 回表示 (過去 30 日間)
Tiki Tiki
Tiki Tiki 2018 年 7 月 21 日
編集済み: Tiki Tiki 2019 年 5 月 29 日
Hi everyone
Can you help me to optimize code?
this is my code:
aa =
1 4 5 7
9 2 3 8
bb =
1 3
2 4
I want to get value of each row aa by position of row bb. Like this
cc = [1 5; 2 8]
Thank

採用された回答

Jan
Jan 2018 年 7 月 21 日
編集済み: Jan 2018 年 7 月 21 日
I guess, that the elements of bb are the row indices related to aa, and the column index is the corresponding column of bb:
aa = [1 4 5 7; ...
9 2 3 8; ...
13 21 33 44];
bb = [1 3; ...
2 4; ...
2 3];
s = size(bb);
c = aa(sub2ind(size(aa), repmat((1:s(1)).', 1, s(2)), bb))
Or faster with a direct call, but without exhaustive error checking:
sa = size(aa, 1);
sb = size(bb, 1);
index = (1:sb).' + (bb - 1) .* sa;
aa(index)
  5 件のコメント
Jan
Jan 2019 年 5 月 28 日
I've learned it by using sub2ind at first, and then reading the code of sub2ind.m. I've removed all parts for the error checking and simplified the code such that it works for 2 dimensions only. During implementing this as code, I understood the underlying logic: With linear indexing, the formula is almost trivial. :-)
Tiki Tiki
Tiki Tiki 2019 年 5 月 29 日
編集済み: Tiki Tiki 2019 年 5 月 29 日
Thank
But I find many code of sub2ind.m
How can i know which one? If I try to learn another function like function repmat as you mentioned above.
Have a nice day.
God blesses you.

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by