Я пытаюсь выяснить, как получить доступ к подмассивам Matlab (часть массива) с помощью общего набора векторов индексов.
В общем, проблема определяется как: Учитывая два n-dim конечные точки индекса массива (оба размера nd), один из которых имеет начальный набор индексов (startInd), а другой имеет последний набор индексов (endInd), как получить доступ к подматрице, которая включена между парой индексов-sets?
Например, я хочу заменить это:
Mat=rand(10,10,10,10);
Mat(2:7, 1:6, 1:6, 2:8) = 1.0;
операцией, которая может принимать любой набор из двух n-dim векторов, определяющих индексы для последней операции, которая«абстрактно» выражается в виде:
Mat=rand(10,10,10,10);
startInd=[2 1 1 2];
endInd =[7 6 6 8];
IndexVar=???
Mat(IndexVar) = 1.0;
Таким образом, я хочу получить доступ к Матрицу подматрицы (2: 7, 1: 6, 1: 6, 2: 8), используя переменную или какой-либо другой универсальныйформа, которая позволяет общий N-DIM.Желательно не цикл (так как он медленный).
Я пытался использовать что-то такого рода:
% Generate each index list separately:
nDims=length(startInd);
ind=cell(nDims,1);
for j=1:nDims
ind{j}=startInd(j):1:endInd(j);
end
% Access the matrix:
S.type = '()';
S.subs = ind;
Mat=subsasgn(Mat,S,1.0)
Это, кажется, делает работу, но очень медленная и память-экспансивный, но может дать кому-то идею ...