MATLAB: How to make a column appending columns which are of size of sum of other column

appending columnfor loopImage Processing Toolboxindexing vectorsMATLAB

suppose i have three matrix of same length lat, lon and CG as
lat=[1 2 3 4 5];CG=[5 10 20 11 12];
i want to make like
lat=[lat(1).*ones(CG(1),1);lat(2).*ones(CG(2),1);lat(3).*ones(CG(3),1);lat(4).*ones(CG(4),1);lat(5).*ones(CG(5),1);];
how to do it with loop for large vectors?
i tried like this
n=length(CG)-1;
for i=1:n
kk=lat(i).*ones(CG(i),1);
kk1=[kk;lat(i+1).*ones(CG(i+1),1)]
end
it doesnot work.

Best Answer

>> lat = [1,2,3,4,5];
>> CG = [5,10,20,11,12];
>> V = cell2mat(arrayfun(@(v,n)v*ones(n,1),lat(:),CG(:),'uni',0))
V =
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
5
5
Or, if you really want to use a loop:
N = numel(lat);
C = cell(N,1);
for k = 1:N
C{K} = lat(k).*ones(CG(k),1);
end
V = vertcat(C{:})
Related Question