Can anyone simplify this code please?

Morning all,
I have a problem. I'm trying to take a subset of a matrix, but not a uniform distribution. The difference between points is given in the vector phi, which I've made super long to make sure I don't reach the end of it, As you can see this vector is a 6 number repeating pattern. I've made a vector, zeta, containing the rows I would like to extract from the matrix. But, it is super clunky! Is anyone able to simplify this code for me please? I'm sure it should be possible without the loop.
phi = repmat([8.70;8.70;8.70;8.70;8.70;16.59],10,1);
% Random number generator to decide which sensor to use first
sensor = randi(6,1);
col = 1;
zeta = 1;
while col + round(phi(sensor),0) < 153
col = col + round(phi(sensor),0);
zeta = [zeta; col];
sensor = sensor + 1;
end
Many thanks

5 件のコメント

jlt199
jlt199 2016 年 9 月 13 日
I said rows, clearly I mean columns
John D'Errico
John D'Errico 2016 年 9 月 13 日
Why? Does it take too long to run? pre-optimizing code that has no reason to be optimized is a huge waste of time.
jlt199
jlt199 2016 年 9 月 13 日
More as a learning exercise. I use too many loops in Matlab and don't take advantage of the vectorization enough. I want to start getting better at it before I start on the project with huge amounts of data to process
jlt199
jlt199 2016 年 9 月 13 日
Also, my boss reads Matlab so would be good to have sophisticated looking code ;)
jlt199
jlt199 2016 年 9 月 14 日
Does no comments mean that the code is not easily simplifies and I'm ok using a loop in this context? Thanks

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

 採用された回答

TallBrian
TallBrian 2016 年 9 月 14 日

0 投票

I am not sure exactly what you mean by simplify but here is some code which eliminates the looping.
LENGTH = 153;
phi = round([8.70; 8.70; 8.70; 8.70; 8.70; 16.59]);
max_reps = round(LENGTH / sum(phi)) + 1;
phi_complete = repmat(phi, max_reps, 1);
phi_offset = [1; phi_complete(randi(6,1):end)];
zeta = cumsum(phi_offset);
zeta = zeta(zeta < LENGTH);

1 件のコメント

jlt199
jlt199 2016 年 9 月 15 日
Thanks Brian, this helps a lot

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

その他の回答 (0 件)

カテゴリ

タグ

質問済み:

2016 年 9 月 13 日

コメント済み:

2016 年 9 月 15 日

Community Treasure Hunt

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

Start Hunting!

Translated by