# find the minimal value of a vector

1 ビュー (過去 30 日間)
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 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 2018 年 5 月 1 日

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

### Community Treasure Hunt

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

Start Hunting!

Translated by