find the minimal value of a vector

1 回表示 (過去 30 日間)
Chaoyang Jiang
Chaoyang Jiang 2018 年 4 月 30 日
コメント済み: Chaoyang Jiang 2018 年 5 月 1 日
I wanna find the minimal value of column b with logical c of vector a. When b is super big , max operation takes a very long time(as shown in fig below). How to vectorize the for loop to reduce the calling times of max (the simplified code is shown below)?
a=[1 3 4 52];
b=[2 3 4];%column index
c=logical([1 0 1;1 1 0; 0 0 1]);
d=zeros(length(c),1);
for i=1:length(b)
d(i)=max(a(b(c(i,:))));
end

採用された回答

Walter Roberson
Walter Roberson 2018 年 4 月 30 日
No, there is no faster version. We discussed this already in one of your previous questions where you were asking about max(). As I said then in https://www.mathworks.com/matlabcentral/answers/397675-is-there-a-faster-version-of-min#comment_561596
"If you break out the timing, you will likely find that the cost is in extracting the sub-array c(1,d) to send to the min() function. min() is at worst a linear operation (I say at worst because in theory it could be run in parallel for sufficiently large arrays.)"
If you calculate
>> 9925.39/14867689025
ans =
6.6758122148711e-07
You can see that it is taking about 6.6E-7 seconds per iteration. That is twice as fast as just making one anonymous function call:
>> timeit(@() fun(),0)
ans =
1.441973e-06
so that is really pretty efficient; the Just In Time compiler must be doing a really good job with it.
  1 件のコメント
Chaoyang Jiang
Chaoyang Jiang 2018 年 5 月 1 日
Thanks a lot for your answer!

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

その他の回答 (0 件)

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by