Matlab - 访问多维数组的一部分

Matlab - Accessing a part of a multidimensional array

我正在尝试访问 Matlab 中的多维数组的一部分 - 可以这样做:X(2:3, 1:20, 5, 4:7) 但是,元素的数量和范围都不是固定的,所以我想提供数组的索引——对于上面的例子,它们是

ind1 = [2 1 5 4];
ind2 = [3 20 5 7];

对于固定数量的维度,这不是问题(X(ind1(1):ind2(1),...),但由于它们不是,我不确定如何在 Matlab 中实现它。有没有办法?或者我应该接近这个不同?

可能有更优雅的方法,但这是一个难题,所以这里有一个解决方案:

% some test data
ind1 = [2 1 5 4];
ind2 = [3 20 5 7];
X = randi(99,20,20,20,20);

% get all subscripts in column format
vecs = arrayfun(@colon,ind1,ind2,'Uniformoutput',false);
subs = combvec(vecs{:}).';
% manual sub2ind for a matrix where each row contains one subscript
sizeX = size(X);
idx = cumprod([1 sizeX(1:end-1)])*(subs - [zeros(size(subs,1),1) ones(size(subs,1),size(subs,2)-1)]).';
% reshape
result = reshape(X(idx),ind2-ind1+1);

根据 Indexing of unknown dimensional matrix

中的 Gnovices 答案转换索引的下标

使用comma separated lists你可以让它变得更加快速和友好:

% some test data
ind1 = [2 1 5 4];
ind2 = [3 20 5 7];
X = randi(99,20,20,20,20);

% get all subscripts in column format
vecs = arrayfun(@colon,ind1,ind2,'un',0);
% extract the values
result = X(vecs{:});