Indexing a matrix with an array of ranges
2 次查看(过去 30 天)
显示 更早的评论
I was wondering if it was possible to do the following:
indexArray = [4 2 0];
in = [1:10]'; in = repmat(in, 1, length(indexArray));
out = zeros(size(in));
out(1:end-indexArray,:) = in(indexArray+1:end,:);
so that:
out(:,1)' = [5 6 7 8 9 10 0 0 0 0]
out(:,2)' = [3 4 5 6 7 8 9 10 0 0]
out(:,3)' = [1 2 3 4 5 6 7 8 9 10]
The goal is to do this without being forced to replace the 4th line above with a for loop like:
for i = 1:length(indexArray)
out(1:end-indexArray(i),i) = in(indexArray(i)+1:end,i);
end
Thanks for your help in advance.
0 个评论
回答(2 个)
Matt J
2013-1-2
编辑:Matt J
2013-1-2
My recommendation from your previous related question on this was that you precompute a table of all the desired shifts:
n=length(in);
Table= fliplr(toeplitz([in(n),zeros(1,n-1)], in(n:-1:1) ));
Table(end, end+1)=0;
Then you would just do
out=Table(:,indexArray+1)
4 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!