multidimensional colon operator?
1 次查看(过去 30 天)
显示 更早的评论
I want to do something like that below: copy an N-dimensional array into a N+1-dimensional array at index t in the last dimension. Can this be done efficiently and cleaner than umpteen if-tests or nasty permutes?
function A = insert_x_into_A(A,x,t)
if ndims(A) == 2
A(:,t) = x;
elseif ndims(A) == 3
A(:,:,t) = x;
elseif ndims(A) == 4
A(:,:,:,t) = x;
...
end
I think that something like the pseudo-code below would be neat
function A = insert_x_into_A(A,x,t)
A(colon(ndims(x)),t) = x;
0 个评论
采纳的回答
Jan
2011-2-4
Two approaches: 1. Reshape the matrix at first:
function A = insert_x_into_A(A,x,t)
siz = size(A);
A = reshape(A, [], siz(end));
A(:, t) = x(:);
A = reshape(A, siz);
2. Use a cell as index vector: EDITED: Cleaned up with Bruno's suggestion.
function A = insert_x_into_A(A,x,t)
idx(1:ndims(A) - 1) = {':'};
A(idx{:},t) = x;
4 个评论
更多回答(1 个)
Matt Fig
2011-2-4
If you want to get real evil:
function A = insert_x_into_A(A,x,t)
col = repmat(':,',1,ndims(A)-1);
eval(['A(',col,'t) = x;'])
Though I don't know why you would need such a specific function.
2 个评论
另请参阅
类别
在 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!