#matlab #multidimensional-array
#matlab #многомерный массив
Вопрос:
Мой вопрос может быть тривиальным. У меня есть большая 3D-матрица (m на n на k элементов) в MatLab, и я хочу извлечь все диагональные срезы и сохранить их в другом 3D-массиве. Для лучшего представления я приложил фотографию. пунктирные линии-это диагональные срезы, которые я ищу.
Комментарии:
1. (строка, столбец, страница) — это индексация в matlab
Ответ №1:
Учитывая m x n x k
массив a
, используйте следующий метод для извлечения срезов в массив ячеек:
idx = repmat(reshape((0 : k - 1), 1, 1,[]) (1 : n), [m, 1, 1]); result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});
Срезы имеют размеры [m x 1 x y]
в y
диапазоне от 1
до min(n,k)
.
Для старых версий MATLAB используйте следующее ( bsxfun
вместо неявного расширения):
idx = repmat(bsxfun(@plus, reshape((0 : k - 1), 1, 1,[]), (1 : n)), [m, 1, 1]); result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});
Комментарии:
1. Уважаемый @rahnema1 с этим определением и индексацией
[m,n,k]=size(a)
, я получил ошибку при применении вашего решения.