How to construct this vector without loop?

4 views (last 30 days)
Hi, everyone:
I was wondering, is it possible to construct following vector without for loop?
A=[1 2 3 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 .....]
or equivalently A=[1:(3*1), 1:(3*2), 1:(3*3), 1:(3*4), ...., 1:(3*n)]
Many thanks!

Accepted Answer

Jos (10584)
Jos (10584) on 23 Oct 2013
Edited: Jos (10584) on 23 Oct 2013
Here is flexible version not using cell2mat:
n = 4 ; % user specified
V = 3 ; % as in the example -> [1:V 1:2*V ... 1:n*V]
ix = V*[1:n]
A = ones(1,sum(ix))
ix =ix(1:n-1)
A(cumsum(ix)+1)=-ix+1
A = cumsum(A) % result

More Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 23 Oct 2013
Edited: Azzi Abdelmalek on 23 Oct 2013
A=[1 2 3 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9]
cell2mat(arrayfun(@(x) 1:3*x,A,'un',0))

Vivek Selvam
Vivek Selvam on 23 Oct 2013
Edited: Vivek Selvam on 23 Oct 2013
vec = 3*(1:n);
A = cell2mat(arrayfun(@(x) 1:x,vec,'UniformOutput',0));
or
vec = 1:n;
A = cell2mat(arrayfun(@(x) 1:3*x,vec,'UniformOutput',0));

Categories

Find more on Programming in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!