venerdì, novembre 03, 2006

Matlab: multidimensional array slicing

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: