Generate a evenly spaced array based on two arrays
Mostra commenti meno recenti
Hi,
I have one set of starting and ending points:
s_pt = [1,8,15];
e_pt = [3,12,20];
Now I would like to generate a evenly spaced array based on the corresponding starting and ending points. In this case, there would be three sets of data: (1-3, 8-12, 15-20). The answer would be like:
answer = [1,2,3,8,9,10,11,12,15,16,17,18,19,20]
Are there any functions to generate this kind of data without using for loop?
3 Commenti
Joseph Cheng
il 30 Apr 2015
why do you not want a for loop? it would be easy to accomplish in 2~3 lines
Jamee Lin
il 1 Mag 2015
If you want to see all the solutions you would have to submit a valid solution (of any size) in the first place and then solve any other cody problem.
Note that the best scoring cody solution is unlikely to be the most efficient one.
Risposta accettata
Più risposte (2)
Image Analyst
il 1 Mag 2015
0 voti
Is this homework? It sounds like homework, so I'll just give a hint for now. Use the colon operator (look it up) or, if you want a somewhat different way, use linspace(). You're going to have to learn the colon operator VERY soon if you want to do anything in MATLAB, so start now.
Hint:
8:12 is equal to an array 8,9,10,11,12. You can literally do the assignment in one single line of code.
6 Commenti
Image Analyst
il 1 Mag 2015
On the contrary, the colon operator does fit your requirement - you just didn't use it the way you were supposed to . Try this:
out = [s_pt(1):e_pt(1), s_pt(2):e_pt(2), s_pt(3):e_pt(3)]
That will solve the exact situation you posted perfectly . If, on the other hand, you forgot to mention that this needs to be general enough to work for any two vectors that are the same length, then I invite you to read this and see if Stephen's code will do what you want. Then mark the best answer as "Accepted" and "Vote" for them.
Jamee Lin
il 1 Mag 2015
Image Analyst
il 1 Mag 2015
If you want a simple, intuitive solution, just go through the arrays appending them onto an array, out, that you build up:
s_pt = [1,8,15];
e_pt = [3,12,20];
out = [];
for k = 1 : length(s_pt)
out = [out, s_pt(k):e_pt(k)];
end
% Show the final result in the command window.
out
Jamee Lin
il 1 Mag 2015
Image Analyst
il 1 Mag 2015
Like Stephen mentioned, and you noted in your comment to him, for loops are not always the slowest approach . You could even speed this up even more if you preallocated space for "out" with the zeros() function.
Jan
il 1 Mag 2015
0 voti
Categorie
Scopri di più su Logical in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!