Imagine the start and end values of a range being set from user input. They could be:
a=3;
b=10;
To extract this range from an array, I simply do:
x(a:b);
But I'd like to save this range as one variable in itself, so that I can insert the range easily many places and only have to change it in one place such as:
range=a:b;
x(range);
This gives an error. MatLab will not store the a:b in this manner since : is a string and I thus am mixing strings with numbers. I could convert the a and b into a string with num2str, but then that range cannot be inserted into the x variable.
Is there a way to do this or do I have to manually put together the range with x(a:b) every time?

2 件のコメント

Adam
Adam 2018 年 2 月 26 日
range = a:b;
is perfectly acceptable syntax. : is an operator here, not a string.
Stephen23
Stephen23 2018 年 2 月 26 日
編集済み: Stephen23 2018 年 2 月 26 日
"This gives an error."
Not when I try it:
>> a = 3;
>> b = 10;
>> range = a:b
range =
3 4 5 6 7 8 9 10
See also the earlier question:

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

 採用された回答

Angelo
Angelo 2018 年 2 月 26 日

1 投票

x=[0.1:0.1:2];
range=[3:10];
x(range)

1 件のコメント

Jan
Jan 2018 年 2 月 26 日
See: http://www.mathworks.com/matlabcentral/answers/35676-why-not-use-square-brackets . The additional square brackets waste time only. They are the concatenation operator, but "3:10" is a vector already and nothing is concatenated.
In addition it is worth to consider, that
x(a:b)
is faster than
v = a:b;
x(v)
because in the first case, the index vector a:b is not created explicitly.

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

その他の回答 (1 件)

Jan
Jan 2018 年 2 月 26 日
編集済み: Jan 2018 年 2 月 26 日

1 投票

What's wrong with
x(a:b)
You really need to store it in one variable?
Range.a = a;
Range.b = b;
x(Range.a : Range.b)
Or:
Range = {a,b};
x(Range{1}:Range{b})
You could write a function also:
GetInterval(x, Range)
function y = GetInterval(x, Range)
y = x(Range{1}:Range{b});
end
But this will be slower and worse to read than the direct and simple:
x(a:b)
Note that Matlab seems to avoid the explicit creation of the index vector a:b to save time in this case, but this is not documented.

カテゴリ

ヘルプ センター および File ExchangeEntering Commands についてさらに検索

タグ

質問済み:

2018 年 2 月 26 日

編集済み:

2018 年 2 月 26 日

Community Treasure Hunt

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

Start Hunting!

Translated by