如何在 MATLAB 中将张量的维数折叠成标量

How to fold dimension of a tensor into a scalar in MATLAB

我在 MATLAB 中有一个 n×m×l 张量,我想通过折叠将其变成 n×m 矩阵最后一个维度(特别是添加每个标量)。如何有效地执行此张量中每个条目的最后一个维度的折叠/减少? 更广泛地说,是否有将任意函数应用于张量的整个维度的好方法?

如果有助于理解,我的具体张量称为pixels,最后一个维度是l=3,代表每个像素的R、G和B值,这是我想要的添加以获得亮度。我想出的以下解决方案非常慢:

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

sum 允许对给定的任何维度求和,所以只给它第三个维度。尾随尺寸会自动截断,因此您的矩阵最终将达到 n×m 大小。

否则,对于一般函数:使用循环。循环不再很慢,而单元格肯定是:

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