Assign multidimensional array 'slice' or 'chunk'

2 次查看(过去 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)?

回答(1 个)

Guillaume
Guillaume 2017-9-4
Use sub2ind. However, your vector will have to be repmat'ed for each colon in your indexing. e.g.:
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))

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by