代码之家  ›  专栏  ›  技术社区  ›  I Like Algebra

在Julia中交换行的最简单方法

  •  0
  • I Like Algebra  · 技术社区  · 2 年前

    我想交换矩阵的两个特定行。我不想仅仅为此编写第二个函数,我正在寻找最简单/最快的方法。

    在Matlab或Octave中,为了交换矩阵a的第k行和第r行,我们可以简单地写:

    A([k r],:) = A([r k],:)
    

    当我在Julia(VsCode)上尝试此操作时,我会得到以下错误:error:LoadError:语法:“[k r]”不是有效的函数参数名称 文件路径

    还有别的办法吗?我不想有一个函数只是交换行。 提前感谢

    1 回复  |  直到 2 年前
        1
  •  0
  •   DNF    2 年前

    在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