我想交换矩阵的两个特定行。我不想为此编写第二个函数,我正在寻找最简单/最快的方法。
在 Matlab 或 Octave 中,为了交换矩阵 A 的第 k 行和第 r 行,我们可以简单地写:
A([k r],:) = A([r k],:)
当我在 Julia (VsCode) 上尝试此操作时,出现此错误:错误:LoadError:语法:“[k r]”不是文件路径
周围的有效函数参数名称还有别的办法吗?我不想有一个仅仅交换行的函数。 预先感谢
在 Julia 中,就像在 Numpy 中一样,您可以使用方括号对数组进行索引,这与在 Matlab 中使用常规括号进行索引不同。
所以当你写
A([k r],:)
时,它会被解释为函数调用。改为
A[[k r], :] = A[[r k], :]
有效。但用向量索引比用矩阵索引更惯用,所以添加逗号,如下所示:
A[[k, r], :] = A[[r, k], :]
您说“最简单”,但如果您完全关心性能,那么以下方法会快得多,并且不使用内存:
function swaprows!(A, k, r)
for i in axes(A, 2)
(A[k, i], A[r, i]) = (A[r, i], A[k, i])
end
end