switch case efficiency question

11 ビュー (過去 30 日間)
Chong Tao
Chong Tao 2013 年 9 月 14 日
I have a question about switch/case structure.
if true
switch input[a,b]
case [1,1]
do something 1
case [1,2]
do something 2
case ...
... etc.
end
since a =1 to 40 and b = 1 to 11. So i will end up with a few hundred cases. How to make the code doing the selection more efficient? Thanks, Chong

採用された回答

Image Analyst
Image Analyst 2013 年 9 月 14 日
First of all, a few hundred tests is nothing - it will take just a very small fraction of a second to test 440 cases. Now if you had millions of tests, that might take some time. However looking at a switch statement that spans several thousand lines is difficult. So how you can compact that depends on what "something" is. If it's something that depends on a and b then you could just make the whole thing a single function. But if it really does unique operations in each case block, then you may be stuck. Is there anyway the "somethings" could be made into a single function taking a and b as an input? And I don't mean just transferring 440 tests inside the function. I mean like the something can be parameterized, like out=10*a+42*b or something like that.
  1 件のコメント
Image Analyst
Image Analyst 2013 年 9 月 14 日
Responding to Chong's "Answer"... No, adding a break won't make it faster since it automatically breaks anyway once it does the case block.

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

その他の回答 (2 件)

Chong Tao
Chong Tao 2013 年 9 月 14 日
Thank you very much, Image Analyst.
"doing something " in each case is unique. it is not a function of a, b. Do you think add a break command to each case will make it faster since there will be only one match anyway?
switch input[a,b]
case [1,1]
M =18; break
case [1,2]
M =20
case ...
... etc.
end

Jan
Jan 2013 年 9 月 15 日
Please post the problem in valid Matlab syntax. "switch input[a,b]" could mean a variety of different things.
Your code example seems to be a look-up-table. Then this would be more efficient:
a = 1;
b = 2;
lut = [18, 20, 23; 19, 26, 65];
M = lut(a, b);
  2 件のコメント
Chong Tao
Chong Tao 2013 年 9 月 15 日
Thanks Jan. A look-up-table will definitely do the job. I never thought about this. :)
Image Analyst
Image Analyst 2013 年 9 月 15 日
I thought "Do something" meant executing a bunch of code that was all unique, not just assigning a single variable like M. If it's really as simple as assigning some variable, then a look up table would work. If they're integers you can use intlut() in the Image Processing Toolbox.

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

カテゴリ

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