【问题标题】:Equivalent functionality of Matlab sortrows() in MathNET.Numerics?MathNET.Numerics 中 Matlab sortrows() 的等效功能?
【发布时间】:2020-10-15 19:32:54
【问题描述】:

是否存在与 Matlab 的 sortrows(A, column) 等效的 MathNET.Numerics,其中 A 是 Matrix<double>

召回Matlab's documentation

B = sortrows(A,column) 根据指定的列对 A 进行排序 向量列。例如, sortrows(A,4) 对 A 的行进行排序 根据第四列中的元素升序排列。 sortrows(A,[4 6]) 首先根据 A 中的元素对 A 的行进行排序 第四列,然后根据第六列的元素来 断绝关系。

【问题讨论】:

    标签: matlab mathnet-numerics


    【解决方案1】:

    与我对您其他问题的回答类似,没有内置任何内容,但您可以在矩阵行的 Enumerable 上使用 Linq's OrderBy() 方法。给定一个Matrix<double> x

    x.EnumerateRows() 返回矩阵行的Enumerable<Vector<double>>。然后,您可以按每行的第一个元素对这个可枚举对象进行排序(如果这是您想要的)。

    在 C# 中,

    var y = Matrix<double>.Build.DenseOfRows(x.EnumerateRows().OrderBy(row => row[0]));
    

    Example

    写成extension method:

    public static Matrix<double> SortRows(this Matrix<double> x, int sortByColumn = 0, bool desc = false) {
        if (desc)
            return Matrix<double>.Build.DenseOfRows(x.EnumerateRows().OrderByDescending(row => row[sortByColumn]));
        else
            return Matrix<double>.Build.DenseOfRows(x.EnumerateRows().OrderBy(row => row[sortByColumn]));
    }
    

    然后你可以这样调用:

    var y = x.SortRows(0); // Sort by first column
    

    Here's a big fiddle containing everything

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      相关资源
      最近更新 更多