Assign multidimensional array 'slice' or 'chunk'
6 次查看(过去 30 天)
显示 更早的评论
What’s the best way to assign
A(:, :, x1, x2, …, xn)
to a given array, where
x = [x1, x2, …, xn]
is a vector whose length is arbitrary (but matches the relevant dimensions of A)?
0 个评论
回答(1 个)
Guillaume
2017-9-4
x = [4, 7, 8]
A = reshape(1:5*6*7*8*9, [5, 6, 7, 8, 9]);
%indexing wanted: A(:, :, x1, x2, x3)
[idx1, idx2] = ndgrid(1:size(A, 1), 1:size(A, 2)); %generate all valid indices for the 1st two colons, put all colons into the ndgrid call
idxx = arrayfun(@(v) repmat(v, size(idx1), 1), x, 'UniformOutput', false); %repmat each x value into shape of colon index matrices and transform into cell array
result = A(sub2ind(size(A), idx1, idx2, idxx{:}))
isequal(result, A(:, :, 4, 7, 8))
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!