Most efficient way to generate an array around a central value

15 次查看(过去 30 天)
Hi!
I am trying to span a linearly spaced array around a center value without knowing number of points in the array beforehand. I only have the step size and the lower and upper limits that must not be exceeded. For example, if center = -4,3, stepsize = 2, lower = -7, upper = 3, then the resulting array should be array = [-6.3 -4.3 -2.3 -0.3 1.7].
Is there a way to generate such an array as efficiently as possible (e.g. without while-loops)?
Thanks for all the help in advance!

采纳的回答

Jan
Jan 2018-7-19
编辑:Jan 2018-7-19
A bold guess:
center = -4.3
step = 2
low = -7
high = 3
vhigh = center:step:high;
vlow = center - step:-step:low;
result = [vlow(end:-1:1), vhigh]
Or in one step:
L = low + rem(center - low, step);
H = high - rem(high - center, step);
result = L:step:H
I'm not sure if this is more stable considering rounding errors:
result = linspace(L, H, 1 + (H-L) / step)

更多回答(1 个)

Adam
Adam 2018-7-19
编辑:Adam 2018-7-19
[ flip( center:-stepsize:lower ), ( center + stepsize ):stepsize:upper ];
looks like it would work, though I haven't tested all edge cases and there are probably neater ways.
If you prefer you could just do the simpler:
unique( [ flip( center:-stepsize:lower ), center:stepsize:upper ] );
to get rid of the duplicated centre point, though I imagine it is less efficient.

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by