Как сложить размерность тензора в скаляр в MATLAB - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть тензор n × m × l в MATLAB, который я хочу превратить в матрицу n × m , сложив последнее измерение (в частности, добавив каждый скаляр).Как я могу эффективно сгибать / уменьшать последнее измерение каждой записи в этом тензоре? В более широком смысле, есть ли хороший способ применить произвольную функцию ко всему измерению тензора?

Если это помогает понять, конкретный тензор, который я имею, называется pixels ипоследнее измерение равно l=3 и представляет значения R, G и B каждого пикселя, которые я хочу добавить для получения яркости.Следующее решение, которое я придумал, мучительно медленное:

cellfun( @(x) sum(x), num2cell( pixels, 3 ) )

1 Ответ

0 голосов
/ 28 сентября 2018
sum(pixels,3)

sum позволяет суммировать по любому заданному измерению, поэтому просто задайте ему третье измерение.Задние размеры автоматически обрезаются, поэтому ваша матрица будет иметь размер n-на-м.

В противном случае с общими функциями: используйте цикл.Циклы больше не очень медленные, а ячейки определенно:

out = zeros(size(pixels,1),size(pixels,2));
for ii = 1:size(pixels,3)
    out(:,:) = YourFunc(pixels(:,:,ii));
end
...