在 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;