如何在 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 x m。

否则,使用常规函数:使用循环。循环不再很慢,而单元格肯定是:

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

最新更新