我不确定我是否习惯于更正标题中的措辞来描述问题。请随意编辑它以反映下面的描述。
假设我有一个数独求解程序,假设输入矩阵如下,
A = randi(10,[9,9])-1;
我从 1 到 9 逐列索引 3x3 子矩阵。假设表示该索引的变量nSubMat可以采用 1 到 9 之间的任何值。
我按以下方式索引子矩阵,
SubMat(nSubMat) = A((1:3)+(3*floor((nSubMat-1)/3)),(1:3)+(3*mod(nSubMat-1,3)));
现在,我想访问和修改 SubMat 的 (2x3) 位置中的值,而不必首先创建 SubMat(比如避免不必要的副本)。
详细地说,如果我有一个函数 submatrix() 可以实现上述内容,我的语句将如下所示,
submatrix(A((1:3)+(3*floor((nSubMat-1)/3)),(1:3)+(3*mod(nSubMat-1,3))),[2,3]) = 5;
甚至,
submatrix(A((1:3)+(3*floor((nSubMat-1)/3)),(1:3)+(3*mod(nSubMat-1,3))),[2:3,2:3]) = [1 2;3 4];
我知道 Matlab 解释器会自动优化 LHS=RHS 类型分配以提高速度,但上述矩阵运算很重要,原因(算法上)不仅仅是减少副本和加速代码,我不会在这里详述。我在一个名为 Armadillo 的 C++ 库中看到了所需的语法,但我不确定 MATLAB 是否也能做到这一点。