У меня есть 3D-матрица 65x76x100, где каждый элемент содержит тип материала. Я назначил динамику каждому элементу, но динамика пограничных элементов (или границы, или экстерьера, или периметра, или как вы хотите это называть) неверна и должна быть удалена. Мне требуются все линейные индексы граничных элементов, в настоящее время я делаю это так (и это работает):
materials; % given 65x76x100 3D-matrix;
[nxgrid, nygrid, nzgrid] = size(materials);
n = nxgrid*nygrid*nzgrid;
N2 = nxgrid*nygrid;
borderIndices = zeros(n, 1); % initialize an oversized matrix that contains the border indices
for l = 1:nzgrid % loop over zgrid
for k = 1:nygrid % loop over ygrid
for j = 1:nxgrid % loop over xgrid
if (j==1)||(j==nxgrid)||(k==1)||(k==nygrid)||(l==1)||(l==nzgrid)
i = (l-1)*N2 +(k-1)*nxgrid+j; % subscript to linear index
borderIndices(i) = i;
end
end
end
end
Эти вложенные циклы for кажутся мне немного избыточными. Есть ли более оптимальный / лучший / более чистый способ решить эту проблему?