在 GNU/Octave 中乘以 3D 矩阵的最佳方法
Optimal way to multiply 3D matrices in GNU/Octave
我们有一个 50x50x3 矩阵 i
从 PNG 文件中加载了 imread
,由 0 和 1 (fore/background) 组成。图像将使用给定颜色着色,向量 c
由 [0,1] (RGB) 中的 1x3 数字组成,导致 c(k)
替换 i(:,:,k)
中的 1(k
in [1...3]),并保持 0 不变。
用最少的计算时间对这些变量执行此操作(某种矩阵乘法)的表达式是什么?
首先将 c
重塑为 1x1x3 数组:
c = reshape(c,1,1,3);
接下来,进行逐点乘法。 Octave(和最新的 MATLAB 一样)进行隐式单例扩展(又名广播):
i = i .* c;
我们有一个 50x50x3 矩阵 i
从 PNG 文件中加载了 imread
,由 0 和 1 (fore/background) 组成。图像将使用给定颜色着色,向量 c
由 [0,1] (RGB) 中的 1x3 数字组成,导致 c(k)
替换 i(:,:,k)
中的 1(k
in [1...3]),并保持 0 不变。
用最少的计算时间对这些变量执行此操作(某种矩阵乘法)的表达式是什么?
首先将 c
重塑为 1x1x3 数组:
c = reshape(c,1,1,3);
接下来,进行逐点乘法。 Octave(和最新的 MATLAB 一样)进行隐式单例扩展(又名广播):
i = i .* c;