Si immagini di avere un array multidimensionale
A con un numero di dimensioni non noto nel momento in cui si scrive il codice. Si immagini anche di avere a disposizione un array
from contenente per ogni dimensione l'indice di partenza di un'operazione di slicing, e un arrai
to contenente gli indici di arrivo. Ipotizzando di avere già svolto tutti i controlli sulle dimensioni e sugli indici si può effettuare lo slicing come segue:
- Si costruisce una cella contenente per ogni dimensione l'array di indici da utilizzare.
- Si utilizza l'espansione di celle in elenco di parametri accoppiato con l'operatore di slicing.
Il tutto è riassunto nel codice seguente:
% Parametri forniti:
A = rand(3,3,3);
from = [1,2,1];
to = [3,2,2];
% Costruzione della cella (domanda: il ciclo è evitabile?):
D = numel(size(A));
inds = cell(1,D);
for i=1:D
% Gli indici voluti:
inds{i} = from(i):to(i);
end
% Lo slicing:
sliceA = A(inds{:});
Nessun commento:
Posta un commento