如何在 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
我在 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