How can I make a column appending columns which are of size of sum of other column?
2 次查看(过去 30 天)
显示 更早的评论
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.
0 个评论
采纳的回答
Stephen23
2019-1-9
编辑:Stephen23
2019-1-9
>> 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{:})
0 个评论
更多回答(3 个)
Andrei Bobrov
2019-1-9
J = cumsum(CG);
ii = zeros(J(end),1);
ii(J-CG+1) = 1;
out = lat(cumsum(ii));
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!