Please explain the following line of code

4 views (last 30 days)
Commented: Adnaan on 17 Sep 2019
Please explain the following line of code:
o(2.*[1:floor(D/2)]-1)=-32
where
o=-30+60*rand(1,D);

Guillaume on 16 Sep 2019
What couldn't you run the code and see what it does?
Your line of code is just a convoluted of doing:
o(1:2:end) = -32
which basically puts 32 in all the odd indices of o.

Could you please explain how does this code works, even if it is convoluted of doing o(1:2:end) = -32? D are number of dimensions that could 30 or 50.
Guillaume on 16 Sep 2019
There's nothing special about it. D is the length of o. The line creates the vector 1:floor(D/2) which is thus 1:floor(end/2) with respect to o. It them multiplies that vector by 2, so it makes the vector 2, 4, 6, ..., floor(end/2)*2 == end (or end-1). It then subtract 1 from that, so you get 1, 3, 5, ... end. That vector is then used to index o. Indexed values are assigned -32.
As I said, it just an inefficient and obscure way of doing:
o(1:2:end) = -32;
Don't use that original code. There is nothing useful about it.