matlab - 如何在 MATLAB 中将张量的维度折叠为标量

标签 matlab matrix fold tensor

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

如果有助于理解,我的具体张量称为像素,最后一个维度是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 - 如何在 MATLAB 中将张量的维度折叠为标量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558943/

相关文章:

Matlab : Unable to get unique rationals when implementing a formula for binary to real number conversion Part1

c++ - 寻找总和最大的子矩阵

java - 将 3x3 OpenCV Mat 转换为 Android 矩阵

scala - 关于优化简单的 Scala FoldLeft 多个值的建议?

haskell - 替换列表中的元素

list - 在 SML 中查找列表中的最大元素

Matlab:高效的右移计算

matlab - 查找.wave文件的末尾以更改MATLAB中的按钮String

matlab - 使用 MATLAB 计算均方位移 (msd)

c++ - Eigen 库 : SVD is slow compared to GSL